python 操作檔案的常用方式有如下
讀檔案:r 模式
執行個體示範1:
f1 = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='r',encoding='utf-8') # 以 r 的 模式,打開指定路徑的檔案 ,按照utf-8 的方式去讀取
data = f.read() # 讀取檔案,表示讀取所有内容
f.close() # 關閉檔案
執行個體示範2:
f2 = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='rb',encoding='utf-8') # 以 rb 二進制 的 模式,打開指定路徑的檔案 ,按照utf-8 的方式去讀取
f2.close() # 關閉檔案
示例2和示例1的差別在哪?
答:在于示例2打開檔案時并未指定encoding,這是為何?是因為直接以rb模式打開了檔案 ,rb是指二進制模式,資料讀到記憶體裡直接是bytes格式,如果想内容,還需要手動decode,是以在檔案打開階段,不需要指定編碼
循環周遊檔案:
f = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='r',encoding='utf-8') #
for line in f:
print(line)
f.close()
寫檔案:w 模式
f1 = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='w',encoding='utf-8') # 以 w 的 模式,打開指定路徑的檔案 ,按照utf-8 的方式去寫
data = f.write(“.....”) # 寫入指定的檔案
f2 = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='rb',encoding='utf-8') # 以 wb 二進制 的 模式,打開指定路徑的檔案 ,按照utf-8 的方式去讀取
data = f.write(“.....”) # 寫入指定的檔案
提示:檔案以w 或者 wb 的方式去操作的時候,會清空原有的檔案,
wb,寫入時需要直接傳入以某種編碼的0100101,即:位元組類型
w 和 encoding,寫入時需要傳入unicode字元串,内部會根據encoding制定的編碼将unicode字元串轉換為該編碼的 010101010
追加檔案:a模式
f1 = open(file='D:\Python3.5-learn\子產品2\character3_檔案操作\staff_table.txt',mode='a',encoding='utf-8') # 以 w 的 模式,打開指定路徑的檔案 ,按照utf-8 的方式去寫
data = f.write(“\n11,Kevin Chen,22,13151054603,Sales,2013-04-01”) # 寫入指定的檔案
f1.close() # 關閉檔案
檔案操作時,以 “a”或“ab” 模式打開,則隻能追加,即:在原來内容的尾部追加内容
寫入到硬碟上時,必須是某種編碼的0101010,打開時需要注意:
ab,寫入時需要直接傳入以某種編碼的0100101,即:位元組類型
a 和 encoding,寫入時需要傳入unicode字元串,内部會根據encoding制定的編碼将unicode字元串轉換為該編碼的 010101010
讀寫模式:r+
f1 = open("beiying2.txt", "r+",encoding="utf-8") # 以讀寫的方式打開檔案
data = f1.read() # 讀取檔案
print(data)
f1.write("\n first line") # 在檔案的末尾追加檔案
f1.close() # 關閉檔案
寫讀模式:w+
f1 = open("beiying.txt", "w+", encoding="utf-8")
data = f1.read()
f1.write("line 1")
f1.write("\nline 2")
f1.write("\nline 3")
f1.write("\nline 4")
f1.close()
w+會先把檔案清空,再寫新内容,相比w模式,隻是支援了一個讀功能,且還隻能讀已經寫入的新内容
檔案操作的其他方式:
def flush(self, *args, **kwargs): # real signature unknown
把檔案從記憶體buffer裡強制重新整理到硬碟