標籤:運行 連續 append alt rip 支援 9.png highlight int
r:唯讀模式(如果沒指定模式,預設為唯讀模式)
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼fr = f.read()print(fr)f.close() # 關閉檔案
運行結果
如果對同一個檔案控制代碼連續進行 read() 操作的話,只有第一個 read() 操作有內容,其餘的都是空白的
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼fr = f.read()fr1 = f.read()fr2 = f.read()print(fr)print("---------")print(fr1)print("+++++++++")print("---------")print(fr2)print("+++++++++")f.close() # 關閉檔案
運行結果
因為 read() 操作是連續的
readline() 進行一行一行地讀取
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼print(f.readline())print(f.readline())print(f.readline())print(f.readline())print(f.readline())f.close() # 關閉檔案
運行結果
因為每一行末尾都有一個分行符號 \n,列印的時候 \n 也列印了,所以空了一行
readlines() 以行為單位讀取檔案內容
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼fr = f.readlines()print(fr)f.close() # 關閉檔案
運行結果
結果是列表,每行字串為該列表的元素,每行末尾有個分行符號 \n
列印每行的內容
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼for line in f.readlines(): print(line.strip()) # strip() 去掉分行符號f.close() # 關閉檔案
運行結果
readlines() 遇到大檔案時比較占記憶體,因為 readlines() 直接將整個檔案讀入記憶體,推薦用下面的方法
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼for line in f: print(line.strip()) # strip() 去掉分行符號f.close() # 關閉檔案
這個方法是一行一行地讀
readable() 判斷檔案是否可讀
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r‘) # 檔案控制代碼fr = f.readable()print(fr)f.close() # 關閉檔案
運行結果
w:唯寫模式,檔案不存在則建立,檔案存在則覆蓋原檔案
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_w‘, mode=‘w‘)f.write(‘憫農\n‘)f.write(‘李紳\n‘)f.write(‘春種一粒粟,秋收萬顆子。\n‘)f.write(‘四海無閑田,農夫猶餓死。‘)f.close()
運行,建立了一個檔案“file_w”(本地沒有該檔案)
如果檔案存在的話
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_w‘, mode=‘w‘)f.write(‘test‘)f.close()
運行結果
之前的內容被新的內容覆蓋了
還有一個 writelines() 方法,可以寫入一個序列
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_w‘, mode=‘w‘)f.writelines(["春種一粒粟,", "秋收萬顆子。\n"])f.writelines(("四海無閑田,", "農夫猶餓死。\n"))f.writelines({"鋤禾日當午,", "汗滴禾下土。\n"})f.writelines("誰知盤中餐,粒粒皆辛苦。")f.close()
運行結果
用逗號隔開的各個元素進行拼接
a:追加模式,只能寫不能讀,不會建立新檔案,不會覆蓋原檔案,在原檔案後追加內容
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file="file_w", mode=‘a‘)f.write(‘\nThis is a test‘)f.close()
運行結果
追加模式寫的方法和唯讀模式用的方法一樣,只不過追加模式是在原檔案末尾新增內容
rb:唯讀二進位模式
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘rb‘)fr = f.read()print(fr)f.close()
運行結果
wb:唯寫二進位模式
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_w‘, mode=‘wb‘)f.write(‘春種一粒粟,秋收萬顆子。\n‘.encode())f.write(b‘This is a test‘)f.close()
運行結果
wb 也可以用來寫入圖片檔案、音頻檔案等
ab:追加二進位模式
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file="file_w", mode=‘ab‘)f.write(‘\nThis is from append1\n‘.encode())f.write(b‘This is from append2‘)f.close()
運行結果
r+:讀寫入模式,既可讀,也可以寫(讀模式支援寫)
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_test‘, mode=‘r+‘)fr = f.read()print(fr)f.write(‘From Writing‘)fr1 = f.read()print(fr1)f.close()
運行結果
寫入的內容
後來寫進去的那句話並沒有被讀出來
w+:寫讀模式,既可寫,也可以讀(寫入模式支援讀)
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file=‘file_w‘, mode=‘w+‘)print(f.read())f.write(‘四海無閑田,‘)f.write(‘農夫猶餓死。‘)print(f.read())f.close()
運行結果
讀出的內容是空的
寫入的內容
原來的內容被覆蓋了
a+:可讀追加模式
# -*- coding:utf-8 -*-__author__ = "MuT6 Sch01aR"f = open(file="file_w", mode=‘a+‘)print(f.read())f.write(‘\nThis is from append1\n‘)f.write(‘This is from append2‘)print(f.read())f.close()
運行結果
寫入的內容
Python - 檔案讀寫