Python3筆記

將字符串形式的列表轉(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功能可謂非常強(qiáng)大,即可以做string與list,tuple,dict的類型轉(zhuǎn)換,還可以做計(jì)算器使用:

>>> eval("1+2")
3

甚至,可以對它能解析的字符串都做處理,而不顧忌可能帶來的后果!所以說eval強(qiáng)大的背后,是巨大的安全隱患,比如用戶惡意輸入字符串。而ast.literal_eval()更為安全。

dict取值防止報錯

使用d['k']取值,如果不存在名為k的鍵會直接報錯,防止報錯可使用dict內(nèi)置的get(key[,default])方法或setdefault(key[,default])方法。
不存在的鍵會返回default。default默認(rèn)為None,可自定義。setdefault()還會向原dict補(bǔ)充一對鍵值。

Python獲取對象屬性的3種方法

  • 方法一:使用屬性運(yùn)算符
    print(xmr.name)
  • 方法二:通過屬性字典dict
    print(xmr.__dict__['name'])
  • 方法三:通過getattr函數(shù)
    print(getattr(xmr, 'name'))

序列逆置

reversed()對括號內(nèi)的序列進(jìn)行逆置,頭變尾,尾變頭,返回一個可迭代的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中只能寫一個表達(dá)式,不可寫多行代碼,不可有賦值操作。所有l(wèi)ambda表達(dá)式都可改為常規(guī)方法,后文不再贅述。

序列迭代map()

針對序列中的元素進(jìn)行逐個處理,第一個參數(shù)是處理方式,第二個參數(shù)是原序列,返回一個可迭代map對象,與原序列元素個數(shù)相同

l1 = [1,2,3]
l2 = list(map(lambda x:x+1, l1))

l2值為[2, 3, 4]

序列篩選

  1. 列表推導(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]
  1. 內(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ù)實(shí)際情況選擇合適的工具。
某知名web框架使用的是xlrd、xlwt、openpyxl三者配合以兼容Linux服務(wù)器環(huán)境。
個人辦公一般的數(shù)據(jù)處理推薦使用openpyxl,必須要處理xls的情況再用xlwings。

三者的安裝方式相同,在有pip的情況下運(yùn)行pip install <工具名>;使用前導(dǎo)入:import <工具名>

  1. xlwings
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。

  1. openpyxl
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)前項(xiàng)目的所有組件及其版本,與pip freeze相比,pipreqs只記錄指定項(xiàng)目所依賴的組件,而pip freeze會記錄當(dāng)前python環(huán)境下所有安裝的組件,會有和項(xiàng)目不相關(guān)的組件被記錄下來。
安裝requirements.txt依賴

pip install -r requirements.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 說明 本筆記參考的Python3教程 筆記只是自己在學(xué)習(xí)過程中,查漏補(bǔ)缺的零星記錄,建議自己系統(tǒng)學(xué)習(xí)教程 筆記 交...
    惑也閱讀 537評論 0 1
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時的積累進(jìn)行修正...
    renyangfar閱讀 3,316評論 0 10
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,237評論 0 9
  • py函數(shù):1.print()2.exit()3.input()4.int() 轉(zhuǎn)為int類型5...
    MORESIR閱讀 429評論 0 1
  • Python基礎(chǔ)知識_0001 1.0 Python是一種怎樣的語言 Python是一門跨平臺、開源、免費(fèi)的解釋型...
    愛學(xué)習(xí)的小白F1閱讀 1,226評論 0 1

友情鏈接更多精彩內(nèi)容