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功能可謂非常強大,即可以做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]

序列篩選

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

三者的安裝方式相同骤星,在有pip的情況下運行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)前項目的所有組件及其版本说敏,與pip freeze相比,pipreqs只記錄指定項目所依賴的組件医咨,而pip freeze會記錄當(dāng)前python環(huán)境下所有安裝的組件架诞,會有和項目不相關(guān)的組件被記錄下來。
安裝requirements.txt依賴

pip install -r requirements.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末很泊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撑蚌,更是在濱河造成了極大的恐慌搏屑,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亮垫,死亡現(xiàn)場離奇詭異伟骨,居然都是意外死亡,警方通過查閱死者的電腦和手機携狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門逛腿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人单默,你說我怎么就攤上這事∫保” “怎么了境蜕?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粱年。 經(jīng)常有香客問我,道長趴泌,這世上最難降的妖魔是什么拉庶? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮吉捶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呐舔。我一直安慰自己,他們只是感情好食呻,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布澎现。 她就那樣靜靜地躺著,像睡著了一般剑辫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椎眯,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天胳岂,我揣著相機與錄音,去河邊找鬼闹击。 笑死成艘,一個胖子當(dāng)著我的面吹牛赏半,可吹牛的內(nèi)容都是我干的淆两。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼仲义,長吁一口氣:“原來是場噩夢啊……” “哼剑勾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暂刘,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捂刺,失蹤者是張志新(化名)和其女友劉穎募寨,沒想到半個月后森缠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡列肢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年独悴,在試婚紗的時候發(fā)現(xiàn)自己被綠了锣尉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡坟奥,死狀恐怖拇厢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情孝偎,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布寺旺,位于F島的核電站势决,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏果复。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一走搁、第九天 我趴在偏房一處隱蔽的房頂上張望迈窟。 院中可真熱鬧,春花似錦菠隆、人聲如沸狂秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钱烟。三九已至,卻和暖如春拴袭,著一層夾襖步出監(jiān)牢的瞬間曙博,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工般哼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惠窄,地道東北人蒸眠。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓楞卡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒋腮。 傳聞我的和親對象是個殘疾皇子介劫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

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