Python 中如何把文件的每一行读入一个列表?

Python 把文件读成行列表:f.readlines() 一次性读入(含换行符),或列表推导式 [line.rstrip() for line in f]。大文件建议迭代处理。本文对比各方法。

最佳实践
Python 中如何把文件的每一行读入一个列表?封面

常用写法:f.readlines() 直接得到行列表(通常保留行尾,最后一行可能没有换行);想去掉换行符:[line.rstrip('\n') for line in f]。大文件注意内存,可改用迭代逐行处理。

readlines() 一次读入

with open('file.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

print(lines)  # ['第一行\n', '第二行\n', ...]

顺便去掉换行符

with open('file.txt', 'r', encoding='utf-8') as f:
    lines = [line.rstrip('\n') for line in f]

过滤空行/注释

with open('file.txt') as f:
    lines = [line.strip() for line in f if line.strip() and not line.lstrip().startswith('#')]

大文件的内存考量

readlines() 把整个文件加载进内存。GB 级文件建议不建列表,直接迭代处理:

with open('huge.log') as f:
    for line in f:      # 避免累计全部行,但内存仍受缓冲与最长单行影响
        process(line)

常见问题(FAQ)

Q:readlines() 和 read().splitlines() 有区别吗?
A:结果接近。read().splitlines() 默认去掉行分隔符,识别的Unicode行边界比文本文件通用换行更多,故结果不总与readlines相同;readlines() 保留行尾。两者都是全量加载。

Q:只要前 N 行?
A:itertools.islice(f, N) 惰性取前 N 行,不会读完整个文件。

Q:编码错误中断读取?
A:open(..., errors='replace') 或 errors='ignore' 容错会替换或丢弃字节,不能视为无损;应优先确认来源编码,chardet 仅作启发式判断。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台