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 的方式去讀取

data = f.read() # 讀取文件,表示讀取所有內容

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 模式
實例演示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
按指定長度截斷文件
指定長度的話,就從文件開頭開始截斷指定長度,不指定長度的話,就從當前位置到文件尾部的內容全去掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章