天天看點

python 基礎 day3

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裡強制重新整理到硬碟