python 檔案的基本操作
阿新 • • 發佈:2020-07-17
檔案的基本操作
作業系統預設編碼
-
windows:gbk
-
linux:utf-8
-
Mac-OS:utf-8
-
開啟檔案
-
f1 = open('read.txt', encoding='utf-8',mode='r')
f1變數稱為檔案操作控制代碼,通常以f1、file_handler、f_h等約定俗成形式存在。
開啟檔案預設模式為'r',省略mode引數以只讀的形式開啟該檔案。
-
檔案開啟之後必須要關閉:f1.close()。
-
-
檔案的讀:常用讀模式 r,rb,r+,r+b……
-
讀取檔案模式'r',mode='r',用於讀取文字檔案。
-
f1.read():整個檔案全部一次性讀出來。返回值是一個字串。
-
f1.readline():按照一行一行讀取。帶有指標特性,下一次讀取會接著上一行後開始讀取。
-
f1.readlines():多行讀取,返回一個列表,每個元素是檔案中的一行。
-
★★★ for:以遍歷檔案控制代碼的方式迴圈讀取全部檔案內容,表現形式等於readlines()方法返回的列表。但有很大的不同,在讀取大型巨型檔案時候,read()和readlines()方法會直接將整個檔案讀取進電腦記憶體,這將會導致記憶體不足;而for迴圈讀取大型檔案時,單次迴圈時間內只有檔案內的一行內容佔用記憶體,進入下個迴圈即釋放上一行內容。
f1 = open('檔案的操作練習.txt', mode='r', encoding='utf-8') for line in f1: print(line, end='') f1.close()
-
-
讀取檔案模式'rb',mode='rb',用於讀取非文字檔案。
-
使用方法與'r'模式一樣,
f1=open('1寸照片.jpg',mode='rb') # 不需要加編碼模式 print(f1.read()) f1.close()
-
-
-
檔案的寫:常用寫模式 w,wb,w+,w+b
-
w寫模式:mode='w',用於寫入本文檔案。
-
f1.write()方法:沒有檔案時候建立一個檔案,如果檔案存在就”先清空再寫入“內容。
w模式下,只有開啟檔案的時候清空一次,如果開啟檔案之後進行多次寫入,將以指標位置後開始寫入,並不會每次寫入都清空檔案內容。
f1 = open('檔案的寫練習.txt', mode='w', encoding='utf-8') f1.write('三好學生就是我') f1.close()
-
-
wb寫模式:mode='wb',用於寫入非文字檔案。
-
可以使用rb形式讀取非文字檔案,用wb寫入到一個新檔案裡。
f1 = open('cat.jpg', mode='rb') photo=f1.read() f1.close() f2=open('cat1.jpg',mode='wb') f2.write(photo) f2.close()
-
-
-
檔案的追加:常用模式 a,ab,a+,a+b
-
a 追加模式:mode='a',用於追加寫入文字檔案。
如果指定檔案不存在,則先建立檔案;如果指定檔案已經存在,則直接追加內容。
每次追加並不會自動換行,需要手工新增換行符'\n'
f1=open('檔案的追加',mode='a',encoding='utf-8') f1.write('情景劇劇本《愛的守護》') f1.close()
-
-
檔案操作的其他模式:r+,w+
-
r+ 模式:讀寫,先讀後追加。
該操作物件需要已經存在,不存在指定檔案將報錯。
寫操作時,是在檔案指標位置開始寫入,並不是清空再寫。
操作檔案指標方法:f1.seek(),指定檔案指標所在位置。
f1=open('檔案的追加',mode='r+',encoding='utf-8') print(f1.read()) f1.write('\n檔案的讀寫操作') print(f1.read()) f1.close()
-
-
檔案操作的其他功能:
-
對檔案控制代碼的常用操作:read()、read(n)、readline()、readlines()、write……
-
獲取當前檔案操作控制代碼的指標的位置:f1.tell(),返回值是以位元組為單位計算的整數。
-
調整當前檔案操作控制代碼的指標位置:f1.seek(),括號中填寫整數,以位元組為單位計算。
-
強制重新整理檔案:f1.flush(),將快取中的資料立刻寫入檔案,同時清空快取,一般用於close()方法之前,作用為關閉檔案前將快取寫入檔案。
-
-
開啟檔案的另一種方式:
-
with open()方法:
-
優點一:不用手動關閉檔案控制代碼,它會在結束操作之後的一定時間內關閉。
-
優點二:一個with可以開啟多個檔案進行操作
# 太長語句換行可以直接使用'\'符號,直譯器在一個語句裡遇到這個符號就會知道這行沒有結束。 with open('檔案的追加',mode='r',encoding='utf-8') as f1,\ open('檔案的操作練習.txt',encoding='utf-8') as f2: print(f1.read()) print(f2.name)
-
-
-
檔案的修改操作:
-
檔案修改的標準步驟:
-
以讀的模式開啟原檔案。
-
以寫的模式建立一個新檔案。
-
將原檔案的內容讀出來修改成新內容,寫入新檔案。
-
將原檔案刪除。
-
將新檔案重命成原檔案。
- 一次性讀取到記憶體,進行替換內容修改:
import os with open('檔案的操作練習.txt',encoding='utf-8') as f1,\ open('檔案的操作練習.bak',mode='w',encoding='utf-8') as f2: old_file=f1.read() new_file=old_file.replace('Mr.H','H.X') f2.write(new_file) os.remove('檔案的操作練習.txt') os.rename('檔案的操作練習.bak','檔案的操作練習.txt')
- 使用for迴圈讀取檔案內容進行修改:
with open('檔案的操作練習.txt',encoding='utf-8') as f1,\ open('檔案的操作練習.bak',mode='w',encoding='utf-8') as f2: for line in f1: new_line=line.replace('amwkvi','Mr.H') f2.write(new_line) os.remove('檔案的操作練習.txt') os.rename('檔案的操作練習.bak','檔案的操作練習.txt')
-
-