使用 with open 是 python 文件操作最穩(wěn)妥的方式,能自動關(guān)閉文件避免資源泄露。常見模式包括 ‘r’ 只讀、’w’ 寫入(清空原內(nèi)容)、’a’ 追加寫入、’rb’/’wb’ 二進制讀寫。處理大文件時建議按行讀取以節(jié)省內(nèi)存,可用 for line in f 配合 strip() 去除換行與空格,編號讀取則用 enumerate(f)。寫文件時注意 ‘w’ 會覆蓋原有內(nèi)容,追加應(yīng)使用 ‘a’,且需手動添加換行符 n,f.writelines() 也不會自動加換行。對于結(jié)構(gòu)化數(shù)據(jù)推薦使用 json 和 csv 模塊,可直接處理字典、列表等復(fù)雜結(jié)構(gòu),避免手動拼接字符串。此外需注意路徑、編碼和模式選擇等細節(jié)問題,以減少出錯。
python 文件操作是日常編程中非常基礎(chǔ)且常用的功能,無論是處理日志、讀取配置,還是做數(shù)據(jù)清洗,幾乎都會用到。掌握一些常見的讀寫技巧,可以讓你的代碼更簡潔、高效。
用 with open 是最穩(wěn)妥的方式
在 Python 中,推薦使用 with open(…) 的方式來打開文件。這種方式會自動幫你關(guān)閉文件,避免忘記調(diào)用 close() 導(dǎo)致資源泄露。
例如:
立即學(xué)習(xí)“Python免費學(xué)習(xí)筆記(深入)”;
with open('data.txt', 'r') as f: content = f.read()
這樣即使在讀取過程中出現(xiàn)異常,也能保證文件被正確關(guān)閉。
常見模式:
- ‘r’:只讀(默認)
- ‘w’:寫入(會清空已有內(nèi)容)
- ‘a’:追加寫入
- ‘rb’ / ‘wb’:二進制讀/寫
按行讀取適合處理大文件
如果你要處理一個很大的文本文件,一次性讀入內(nèi)存可能不太現(xiàn)實。這時候建議按行讀取:
with open('bigfile.txt', 'r') as f: for line in f: process(line)
這種方法不會一次性加載整個文件,對內(nèi)存友好,適合日志分析、逐行解析等場景。
注意:
- 如果每行特別長,也可能影響性能
- 可以配合 strip() 去除換行符和前后空格
- 若需編號讀取,可以用 enumerate(f)
寫文件時小心覆蓋已有內(nèi)容
很多新手容易犯的一個錯誤是,誤用了 ‘w’ 模式去寫文件,結(jié)果把原來的內(nèi)容全清空了。如果你只是想追加內(nèi)容,記得使用 ‘a’ 模式:
with open('output.txt', 'a') as f: f.write('new linen')
此外,寫文件時需要注意:
- 要自己添加換行符 n
- 使用 f.writelines() 時也不會自動加換行
- 寫完后不要忘了換行或分隔符,否則內(nèi)容可能會粘在一起
處理 JSON 或 CSV 等結(jié)構(gòu)化數(shù)據(jù)有專門方法
雖然原生的 read() 和 write() 已經(jīng)很強大,但如果你要處理的是結(jié)構(gòu)化數(shù)據(jù),比如 JSON 或 CSV,Python 標準庫提供了更合適的模塊:
比如讀寫 JSON:
import json # 寫入 JSON with open('data.json', 'w') as f: json.dump(data, f) # 讀取 JSON with open('data.json', 'r') as f: data = json.load(f)
CSV 同樣簡單,可以用 csv 模塊處理,這里不展開。
這些模塊的好處是能直接處理復(fù)雜結(jié)構(gòu),比如字典、列表,不需要手動拼接字符串。
基本上就這些。文件操作看起來不復(fù)雜,但細節(jié)上很容易踩坑,尤其是路徑問題、編碼設(shè)置、讀寫模式選錯這些,多留心就能避免很多麻煩。