python必學知識之文件操作(建議收藏)
一.文件基本操作
1.1 文件打開和關閉
- open(‘文件名稱’,’打開模式’)
- 模式:r(隻讀,指針再頭) w(隻寫,存在覆蓋,不存創新) a(追加) b(二進制格式)
- close() 方法關閉文件
f=open('text.txt','w')#創建text.txt文件,用f來指代 f.close()#關閉文件
註意: 打開一個文件之後,一定要關閉,否則後面無法繼續操作這個文件
with
上下文管理,不管在處理文件過程中是否發生異常,都能保證 with 語句執行完畢後已經關閉打開的文件句柄。
def main(): with open('text.txt','w+') as f: content=f.read()#讀取文件寫入內容 print(content)#輸出 main()#輸出完成後會自動關閉文件
錯誤:如果報錯io.UnsupportedOperation: not readable
因為你是用open
打開一個文件,此時調用的是w
寫入模式,下面使用read
是沒有權限的,你得使用w+
讀寫模式
1.2 讀/寫文件
1.2.1 寫文件
寫文件 write
默認的編碼是gbk
這個是中文編碼,最好的習慣呢就是我們再打開一個文件的時候給它指定一個編碼類型encoding
,要不然會出現亂碼
f=open('text.txt','w',encoding='utf-8')#w為寫入模式 f.write('人生苦短,我用python')#寫入文件text.txt f.close() #writelines()可傳一個可迭代對象 f=open('text.txt','a',encoding='utf-8')#a為追加模式
他會自動生成text文件然後寫入
writelines 方法將可迭代對象,迭代寫入文件
f.write('\r\n') f.writelines(['人生','就是','不斷的學習']) print('\n') f.close()
1.2.2 讀文件
read(num):傳入一個數字做參數,表示讀取指定字符個數。列:read(1)
readlines() :按行讀取,一次性讀取所有內容,返回一個列表,每一行內容作為一個元素。
readline() :按行讀取,但是一次隻讀取一行。
#讀取文件 f=open('text.txt','r',encoding='utf-8')#隻讀模式 print(f.read())#全部讀取輸出 f.close()
註意:出現UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xad in position 52: illegal multibyte sequence錯誤
解決:open中加入encoding=‘utf-8’就行
二. 文件備份腳本
利用腳本完成自動備份,要求用戶輸入文件名稱,完成自動備份
def copyfile(): #接收輸入的文件 old_file=input('請輸入要備份的文件:') file_list=old_file.split(".")#split()函數通過指定分隔符對字符串進行切片,假設要備份text.txt文件,輸出是['text', 'txt'] new_file=file_list[0]+'_備份.'+file_list[1]#構造新的文件名,加上備份後綴 old_f=open(old_file,'r')#隻讀模式打開備份的文件 new_f=open(new_file,'w')#隻寫模式打開新文件,不存在則創建 new_f.write(old_f.read())#將備份文件內容讀取出來寫入新文件 #關閉所有打開文件 old_f.close() new_f.close() copyfile()#到時候文件夾裡面會出現一個text_備份.txt的文件,內容和備份文件一樣
如果處理超大文件,一次將全部內容讀取出來顯然是不合適的,在上面代碼的基礎上改進下代碼,讓它備份大文件也不會導致內存被占滿。
def copyfile2(): #接收輸入的文件 old_file=input('輸入要備份的文件') #如果沒有輸入或者輸入錯誤就提示 if not old_file: print('輸入錯誤') old_file = input('輸入要備份的文件:') else: file_list=old_file.split(".") print(file_list) #創造新的文件名,加上備份後綴 if len(file_list)<2:#如果列表長度小於2,就不用加. new_file=file_list[0]+'_備份2' pass else:#文件有後綴的情況 new_file=file_list[0]+'_備份2.'+file_list[1] #用異常處理判斷內存是否被占滿 try: #同時打開需要備份的文件,新文件 with open(old_file,'r') as old_f, open(new_file,'a') as new_f: while True: content=old_f.read(2048)#一次讀取2048個字符 new_f.write(content)#寫入 #當讀取的內容字符長度小於2048是說明讀取完畢 if len(content)<2048: break#跳出循環 except Exception as e: print(e)#如果內存滿無法讀取瞭,就拋出異常 copyfile2()#到時候文件夾裡面會出現一個text_備份2.txt的文件,內容和備份文件一樣
備份瞭text.txt
總結
到此這篇關於python必學知識之文件操作的文章就介紹到這瞭,更多相關python文件操作內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!