將字符串形式的列表轉(zhuǎn)化成列表
兩種方法:
一斩启、用import ast 調(diào)用ast.literal_eval()函數(shù)
>>> fruits = "['apple','orange','banana']"
>>> import ast
>>> fa = ast.literal_eval(fruits)
>>> print(fa)
['apple', 'orange', 'banana']
>>> print(type(fa))
<class 'list'>
二商架、直接用python里的eval( )函數(shù)
>>> fruits = "['apple','orange','banana']"
>>> fb = eval(fruits)
>>> print(fb)
['apple', 'orange', 'banana']
>>> print(type(fb))
<class 'list'>
eval功能可謂非常強大,即可以做string與list,tuple,dict的類型轉(zhuǎn)換侣签,還可以做計算器使用:
>>> eval("1+2")
3
甚至塘装,可以對它能解析的字符串都做處理急迂,而不顧忌可能帶來的后果!所以說eval強大的背后蹦肴,是巨大的安全隱患袋毙,比如用戶惡意輸入字符串。而ast.literal_eval()更為安全冗尤。
dict取值防止報錯
使用d['k']取值听盖,如果不存在名為k的鍵會直接報錯,防止報錯可使用dict內(nèi)置的get(key[,default])
方法或setdefault(key[,default])
方法裂七。
不存在的鍵會返回default皆看。default默認為None,可自定義背零。setdefault()還會向原dict補充一對鍵值腰吟。
Python獲取對象屬性的3種方法
- 方法一:使用屬性運算符
print(xmr.name)
- 方法二:通過屬性字典dict
print(xmr.__dict__['name'])
- 方法三:通過getattr函數(shù)
print(getattr(xmr, 'name'))
序列逆置
reversed()
對括號內(nèi)的序列進行逆置徙瓶,頭變尾,尾變頭侦镇,返回一個可迭代的reversed對象(迭代器),可以直接迭代壳繁,但需要使用list()轉(zhuǎn)化為列表才能被正常print震捣。
>>>l1 = [1,3,2]
>>>l2 = list(reversed(l))
>>>l2
[2,3,1]
相對應(yīng)的列表對象方法:list.reverse()
,可以把原列表對象直接逆置蒿赢,沒有返回值,只能用于列表渣触。注意可能會污染原數(shù)據(jù)羡棵。
序列排序
sorted() 的使用方法:
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
sorted()可加額外參數(shù)【cmp或key】和reverse
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 參數(shù)cmp,lambda雙參嗅钻,自定義比較兩元素的方式
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 參數(shù)key皂冰,lambda單參啊犬,自定義要比較元素中的什么
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按年齡降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
lambda
中只能寫一個表達式,不可寫多行代碼觉至,不可有賦值操作睡腿。所有l(wèi)ambda表達式都可改為常規(guī)方法峻贮,后文不再贅述应闯。
序列迭代map()
針對序列中的元素進行逐個處理,第一個參數(shù)是處理方式碉纺,第二個參數(shù)是原序列,返回一個可迭代map對象耿导,與原序列元素個數(shù)相同
l1 = [1,2,3]
l2 = list(map(lambda x:x+1, l1))
l2值為[2, 3, 4]
序列篩選
- 列表推導(dǎo)式
mylist = [1, 2, 3, -4, -5, 6, 7, 8, 9]
new_list1 = [n for n in mylist if n > 0 ]
print(new_list1)
#result:[1, 2, 3, 6, 7, 8, 9]
- 內(nèi)建的filter()函數(shù)
>>> mylist = [1, 2, 3, -4, -5, 6, 7, 8, 9]
>>> new_list2 = list(filter(lambda n:n>0, mylist))
>>> new_list2
[1, 2, 3, 6, 7, 8, 9]
python操作excel
常用工具對比:
xlrd:可讀xls态贤、xlsx;
xlwt:可寫xls箱吕;
xlwings:可讀寫柿冲,依賴于pywin32,需要安裝有excel軟件假抄,支持.xls和.xlsx格式
openpyxl:可讀寫,不需要excel軟件婚瓜,僅支持.xlsx格式刑棵,不支持.xls
各種工具各有特色,根據(jù)實際情況選擇合適的工具蛉签。
某知名web框架使用的是xlrd、xlwt碍舍、openpyxl三者配合以兼容Linux服務(wù)器環(huán)境片橡。
個人辦公一般的數(shù)據(jù)處理推薦使用openpyxl,必須要處理xls的情況再用xlwings。
三者的安裝方式相同骤星,在有pip的情況下運行pip install <工具名>
爆哑;使用前導(dǎo)入:import <工具名>
import xlwings as xw
#連接到excel
workbook = xw.Book(r'path/myexcel.xlsx')#連接excel文件
#連接到指定單元格
data_range = workbook.sheets('Sheet1').range('A1')
#寫入數(shù)據(jù)
data_range.value = [1,2,3]
#保存
workbook.save()
如果沒有MS office,只有WPS揭朝,嘗試添加app = xw.App(spec='wpsoffice')
,然后使用app代替xw柱嫌。
import openpyxl
# 新建文件(工作簿)
workbook = openpyxl.Workbook()
# 新建工作表
new_sheet = workbook.create_sheet()
# 在當(dāng)前活動工作表中寫入內(nèi)容
workbook.activesheet['A1'] = 'data'
# 保存文件
workbook.save('test.xlsx')
# 打開文件
wb = openpyxl.load_workbook("test.xlsx")
# 在工作表中寫入一整行(傳入一個列表作為參數(shù))
new_sheet.append([1,2,3])
# 在工作表中讀取首行的首格(sheet.rows獲得按行迭代器敌卓,可for循環(huán),但不能方括取值趟径;可轉(zhuǎn)化為二維列表蜗巧,先行后列)
list(sheet.rows)[0][0].value
注意在寫文件路徑的地方掌眠,后綴是必不可少的幕屹,Windows只能使用絕對路徑,Linux可以使用絕對路徑
文本文件操作
data = '123'
with open('file.txt','w') as f:
f.write(data) # 寫
with open('file.txt','r') as f:
data = f.read() # 讀
系統(tǒng)目錄操作
將目錄中的文件名保存到列表中:
import os
file_names = os.dirfile('dir_name')
備份與還原依賴包
pip存在的情況下渺尘,生成requirements.txt文件
pip freeze > requirements.txt
或者使用pipreqs
# 安裝
pip install pipreqs
# 在當(dāng)前目錄(./)生成
pipreqs ./ --encoding=utf8 --force
pipreqs可以找到當(dāng)前項目的所有組件及其版本说敏,與pip freeze
相比,pipreqs
只記錄指定項目所依賴的組件医咨,而pip freeze
會記錄當(dāng)前python環(huán)境下所有安裝的組件架诞,會有和項目不相關(guān)的組件被記錄下來。
安裝requirements.txt依賴
pip install -r requirements.txt