python 基礎 day3

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

相關文章
相關標籤/搜索