python 操做文件的經常使用方式有以下python
讀文件:r 模式
實例演示1:
f1 = open(file='D:\Python3.5-learn\模塊2\character3_文件操做\staff_table.txt',mode='r',encoding='utf-8') # 以 r 的 模式,打開指定路徑的文件 ,按照utf-8 的方式去讀取ide
data = f.read() # 讀取文件,表示讀取全部內容編碼
f.close() # 關閉文件code
實例演示2:
f2 = open(file='D:\Python3.5-learn\模塊2\character3_文件操做\staff_table.txt',mode='rb',encoding='utf-8') # 以 rb 二進制 的 模式,打開指定路徑的文件 ,按照utf-8 的方式去讀取內存
data = f.read() # 讀取文件,表示讀取全部內容utf-8
f2.close() # 關閉文件unicode
示例2和示例1的區別在哪?字符串
答:在於示例2打開文件時並未指定encoding,這是爲什麼?是由於直接以rb模式打開了文件 ,rb是指二進制模式,數據讀到內存裏直接是bytes格式,若是想內容,還須要手動decode,所以在文件打開階段,不須要指定編碼it
循環遍歷文件:字符編碼
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 模式
實例演示1:
f1 = open(file='D:\Python3.5-learn\模塊2\character3_文件操做\staff_table.txt',mode='w',encoding='utf-8') # 以 w 的 模式,打開指定路徑的文件 ,按照utf-8 的方式去寫
data = f.write(「.....」) # 寫入指定的文件
f.close() # 關閉文件
實例演示2:
f2 = open(file='D:\Python3.5-learn\模塊2\character3_文件操做\staff_table.txt',mode='rb',encoding='utf-8') # 以 wb 二進制 的 模式,打開指定路徑的文件 ,按照utf-8 的方式去讀取
data = f.write(「.....」) # 寫入指定的文件
f2.close() # 關閉文件
提示:文件以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()
print(data)
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裏強制刷新到硬盤
def seek(self, *args, *kwargs): # real signature unknown
把操做文件的光標移到指定位置
注意seek的長度是按字節算的, 字符編碼存每一個字符所佔的字節長度不同。
如「路飛學城」 用gbk存是2個字節一個字,用utf-8就是3個字節,所以以gbk打開時,seek(4) 就把光標切換到了「飛」和「學」兩個字中間。
但若是是utf8,seek(4)會致使,拿到了飛這個字的一部分字節,打印的話會報錯,由於處理剩下的文本時發現用utf8處理不了了,由於編碼對不上了。少了一個字節
def tell(self, *args, **kwargs): # real signature unknown
返回當前文件操做光標位置
def truncate(self, *args, *kwargs): # real signature unknown按指定長度截斷文件指定長度的話,就從文件開頭開始截斷指定長度,不指定長度的話,就從當前位置到文件尾部的內容全去掉。