python必學(xué)知識(shí)之文件操作(建議收藏)
一.文件基本操作
1.1 文件打開和關(guān)閉
- open(‘文件名稱','打開模式')
- 模式:r(只讀,指針再頭) w(只寫,存在覆蓋,不存創(chuàng)新) a(追加) b(二進(jìn)制格式)
- close() 方法關(guān)閉文件
f=open('text.txt','w')#創(chuàng)建text.txt文件,用f來指代 f.close()#關(guān)閉文件
注意: 打開一個(gè)文件之后,一定要關(guān)閉,否則后面無法繼續(xù)操作這個(gè)文件
with
上下文管理,不管在處理文件過程中是否發(fā)生異常,都能保證 with 語句執(zhí)行完畢后已經(jīng)關(guān)閉打開的文件句柄。
def main(): with open('text.txt','w+') as f: content=f.read()#讀取文件寫入內(nèi)容 print(content)#輸出 main()#輸出完成后會(huì)自動(dòng)關(guān)閉文件
錯(cuò)誤:如果報(bào)錯(cuò)io.UnsupportedOperation: not readable
因?yàn)槟闶怯?code>open打開一個(gè)文件,此時(shí)調(diào)用的是w
寫入模式,下面使用read
是沒有權(quán)限的,你得使用w+
讀寫模式
1.2 讀/寫文件
1.2.1 寫文件
寫文件 write
默認(rèn)的編碼是gbk
這個(gè)是中文編碼,最好的習(xí)慣呢就是我們再打開一個(gè)文件的時(shí)候給它指定一個(gè)編碼類型encoding
,要不然會(huì)出現(xiàn)亂碼
f=open('text.txt','w',encoding='utf-8')#w為寫入模式 f.write('人生苦短,我用python')#寫入文件text.txt f.close() #writelines()可傳一個(gè)可迭代對象 f=open('text.txt','a',encoding='utf-8')#a為追加模式
他會(huì)自動(dòng)生成text文件然后寫入
writelines 方法將可迭代對象,迭代寫入文件
f.write('\r\n') f.writelines(['人生','就是','不斷的學(xué)習(xí)']) print('\n') f.close()
1.2.2 讀文件
read(num):傳入一個(gè)數(shù)字做參數(shù),表示讀取指定字符個(gè)數(shù)。列:read(1)
readlines() :按行讀取,一次性讀取所有內(nèi)容,返回一個(gè)列表,每一行內(nèi)容作為一個(gè)元素。
readline() :按行讀取,但是一次只讀取一行。
#讀取文件 f=open('text.txt','r',encoding='utf-8')#只讀模式 print(f.read())#全部讀取輸出 f.close()
注意:出現(xiàn)UnicodeDecodeError: ‘gbk' codec can't decode byte 0xad in position 52: illegal multibyte sequence錯(cuò)誤
解決:open中加入encoding=‘utf-8'就行
二. 文件備份腳本
利用腳本完成自動(dòng)備份,要求用戶輸入文件名稱,完成自動(dòng)備份
def copyfile(): #接收輸入的文件 old_file=input('請輸入要備份的文件:') file_list=old_file.split(".")#split()函數(shù)通過指定分隔符對字符串進(jìn)行切片,假設(shè)要備份text.txt文件,輸出是['text', 'txt'] new_file=file_list[0]+'_備份.'+file_list[1]#構(gòu)造新的文件名,加上備份后綴 old_f=open(old_file,'r')#只讀模式打開備份的文件 new_f=open(new_file,'w')#只寫模式打開新文件,不存在則創(chuàng)建 new_f.write(old_f.read())#將備份文件內(nèi)容讀取出來寫入新文件 #關(guān)閉所有打開文件 old_f.close() new_f.close() copyfile()#到時(shí)候文件夾里面會(huì)出現(xiàn)一個(gè)text_備份.txt的文件,內(nèi)容和備份文件一樣
如果處理超大文件,一次將全部內(nèi)容讀取出來顯然是不合適的,在上面代碼的基礎(chǔ)上改進(jìn)下代碼,讓它備份大文件也不會(huì)導(dǎo)致內(nèi)存被占滿。
def copyfile2(): #接收輸入的文件 old_file=input('輸入要備份的文件') #如果沒有輸入或者輸入錯(cuò)誤就提示 if not old_file: print('輸入錯(cuò)誤') old_file = input('輸入要備份的文件:') else: file_list=old_file.split(".") print(file_list) #創(chuàng)造新的文件名,加上備份后綴 if len(file_list)<2:#如果列表長度小于2,就不用加. new_file=file_list[0]+'_備份2' pass else:#文件有后綴的情況 new_file=file_list[0]+'_備份2.'+file_list[1] #用異常處理判斷內(nèi)存是否被占滿 try: #同時(shí)打開需要備份的文件,新文件 with open(old_file,'r') as old_f, open(new_file,'a') as new_f: while True: content=old_f.read(2048)#一次讀取2048個(gè)字符 new_f.write(content)#寫入 #當(dāng)讀取的內(nèi)容字符長度小于2048是說明讀取完畢 if len(content)<2048: break#跳出循環(huán) except Exception as e: print(e)#如果內(nèi)存滿無法讀取了,就拋出異常 copyfile2()#到時(shí)候文件夾里面會(huì)出現(xiàn)一個(gè)text_備份2.txt的文件,內(nèi)容和備份文件一樣
備份了text.txt
總結(jié)
到此這篇關(guān)于python必學(xué)知識(shí)之文件操作的文章就介紹到這了,更多相關(guān)python文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python+pytest接口自動(dòng)化之token關(guān)聯(lián)登錄的實(shí)現(xiàn)
公司某管理后臺(tái)系統(tǒng),登錄后返回token,接著去請求其他接口時(shí)請求頭中都需要加上這個(gè)token,否則提示請先登錄,今天通過本文給大家介紹下python+pytest接口自動(dòng)化之token關(guān)聯(lián)登錄的實(shí)現(xiàn),感興趣的朋友一起看看吧2022-04-04Windows系統(tǒng)下cython_bbox庫的正確安裝步驟
Cython-bbox一般無法直接通過pip直接安裝,那么如何安裝呢?下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下cython_bbox庫的正確安裝步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python爬蟲之自動(dòng)爬取某車之家各車銷售數(shù)據(jù)
應(yīng)朋友要求,幫忙采集某車之家的一些汽車品牌的銷售數(shù)據(jù),包含購車時(shí)間、車型、經(jīng)銷商、裸車價(jià)等一類信息. 今天我們就簡單演示一下采集過程,大家可以根據(jù)自己的興趣進(jìn)行拓展.比如采集自己喜歡的品牌汽車數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析等等,需要的朋友可以參考下2021-06-06Python迭代器iterator生成器generator使用解析
這篇文章主要介紹了Python迭代器iterator生成器generator使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10python飛機(jī)大戰(zhàn)pygame碰撞檢測實(shí)現(xiàn)方法分析
這篇文章主要介紹了python飛機(jī)大戰(zhàn)pygame碰撞檢測實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python使用pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲中碰撞檢測的原理與相關(guān)操作技巧,需要的朋友可以參考下2019-12-12Python實(shí)現(xiàn)把多維數(shù)組展開成DataFrame
今天小編就為大家分享一篇Python實(shí)現(xiàn)把多維數(shù)組展開成DataFrame,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11解決pytorch load huge dataset(大數(shù)據(jù)加載)
這篇文章主要介紹了解決pytorch load huge dataset(大數(shù)據(jù)加載)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05