Python - 文件讀寫
阿新 • • 發佈:2018-08-03
方法 com open 分享 highlight div print app 後來
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 - 文件讀寫