Python 中如何逐行读取文件?
Python 逐行读取文件的最佳方式是直接迭代文件对象:with open('file.txt') as f: for line in f: ...。内存友好,自动关闭文件。本文介绍各种逐行读取方式。
最佳实践:用 with open() 打开文件后直接 for line in f: 迭代——逐行读取、内存占用恒定(不会一次性加载整个文件)、with 语句自动关闭文件句柄。
推荐写法
with open('file.txt', 'r', encoding='utf-8') as f:
for line in f:
line = line.rstrip('\n') # 去掉行尾换行
print(line)
文件对象本身就是迭代器,每次迭代返回一行(含行尾 \n)。无论文件多大,内存中始终只有一行。
反例:一次性读入
# 小文件可以,大文件会撑爆内存
with open('file.txt') as f:
lines = f.readlines() # 整个文件读成列表
其他变体
# 只要非空行
with open('file.txt') as f:
for line in f:
if line.strip():
process(line)
# 带行号
with open('file.txt') as f:
for i, line in enumerate(f, 1):
print(i, line.rstrip())
观测云对照
采集日志文件不需要自己写读取逻辑——观测云 DataKit 的日志采集功能自动跟踪文件新增内容并上报,支持轮转、多行合并和偏移管理。
常见问题(FAQ)
Q:每行末尾的 \n 怎么处理?
A:用 line.rstrip('\n') 去掉换行;如果还想去掉行尾其他空白,用 line.rstrip()。
Q:文件编码不是 UTF-8 怎么办?
A:指定 encoding 参数,如 open('f.txt', encoding='gbk');不确定编码可用 chardet 库探测,或 errors='replace' 容错。
Q:大文件(几十 GB)也能这么读吗?
A:能。迭代读取内存占用恒定,这是逐行迭代相比 readlines() 的最大优势。