弗兰的悲惨之旅
99.73M · 2026-04-04
文件读写是日常开发中非常常见的一类操作,无论是处理日志、配置文件,还是接口数据落地,都离不开 I/O。
Python 中通过 open() 打开文件,返回一个文件对象:
# 打开文件(只读模式)
f = open("test.txt", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()
常见模式包括:
"r":只读(默认)"w":写入(会覆盖原内容)"a":追加写入"rb" / "wb" :二进制模式写文件示例:
f = open("output.txt", "w", encoding="utf-8")
f.write("Hello, Python I/O")
f.close()
这里需要注意两点:
close() 可能导致资源未释放;"w" 模式会清空文件内容。实际开发中,更常见的是逐行处理文本:
f = open("test.txt", "r", encoding="utf-8")
for line in f:
print(line.strip())
f.close()
相比 read() 一次性读取全部内容,这种方式更适合内容较多的文件。
with 语句可以自动管理文件资源,无需手动关闭:
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
等价于:
close()with 是处理文件的标准写法,块结束后自动关闭文件,哪怕中间抛了异常。在实际开发中,它可以避免资源泄露问题。
如果文件有几百 MB,一次性 read() 进内存会很危险。推荐使用逐行读取方式:
with open("big_file.txt", "r", encoding="utf-8") as f:
for line in f:
process(line)
或者更细粒度控制:
with open("big_file.txt", "r", encoding="utf-8") as f:
while True:
line = f.readline()
if not line:
break
process(line)
这种方式只会在内存中保留当前行,适合日志分析、数据清洗等场景。
接口返回值、配置文件、爬虫结果,很多场景都是 JSON 格式。Python 内置的 json 模块直接搞定:
import json
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data)
import json
data = {"name": "Alice", "age": 18}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
参数说明:
ensure_ascii=False:避免中文被转义indent=2:美化输出格式本篇的核心可以归纳为三点:
open / read / writewith 管理文件资源文件 I/O 本身不复杂,但在工程中几乎无处不在。熟悉这些模式后,可以直接应用到日志处理、数据落地、接口调试等多个场景中。
with 并不只用于文件读写,它的本质是上下文管理(context management)机制。文件只是一个常见应用场景。可以把它理解为:在一段代码执行前后,自动做“准备”和“收尾”工作。with 语句依赖一个对象,这个对象需要实现两个方法:
__enter__()
__exit__()
执行流程是:
with obj as x:
# 执行代码块
等价于:
x = obj.__enter__()
try:
# 执行代码块
finally:
obj.__exit__()
也就是说:
enter():进入时执行(资源初始化)exit():退出时执行(资源释放)