Python 中如何把文件的每一行读入一个列表?
Python 把文件读成行列表:f.readlines() 一次性读入(含换行符),或列表推导式 [line.rstrip() for line in f]。大文件建议迭代处理。本文对比各方法。
最快写法:f.readlines() 直接得到行列表(每行带 \n);想去掉换行符:[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.startswith('#')]
大文件的内存考量
readlines() 把整个文件加载进内存。GB 级文件建议不建列表,直接迭代处理:
with open('huge.log') as f:
for line in f: # 内存中只有一行
process(line)
常见问题(FAQ)
Q:readlines() 和 read().splitlines() 有区别吗?
A:结果接近。read().splitlines() 自动去掉换行符且能处理各种行尾(\r\n 等);readlines() 保留行尾。两者都是全量加载。
Q:只要前 N 行?
A:itertools.islice(f, N) 惰性取前 N 行,不会读完整个文件。
Q:编码错误中断读取?
A:open(..., errors='replace') 或 errors='ignore' 容错,或先用 chardet 探测编码。