Python 中 read、readline、readlines 有哪些区别?
对比总览
| 方法 | 读取内容 | 返回类型 | 适用场景 |
|---|---|---|---|
read(size=-1) | 整个文件或指定字节数 | str | 小文件一次性读取 |
readline(size=-1) | 一行(含 \n) | str | 逐行处理,内存敏感 |
readlines() | 所有行组成的列表 | list[str] | 需要随机访问行时 |
示例
假设文件 demo.txt 内容如下:
Hello
World
Python
read() —— 一次读取全部内容
with open("demo.txt") as f:
content = f.read()
print(repr(content))
# 'Hello\nWorld\nPython\n'
指定读取字节数:
with open("demo.txt") as f:
print(repr(f.read(5))) # 'Hello'
print(repr(f.read(6))) # '\nWorld'
readline() —— 每次读取一行
with open("demo.txt") as f:
print(repr(f.readline())) # 'Hello\n'
print(repr(f.readline())) # 'World\n'
print(repr(f.readline())) # 'Python\n'
print(repr(f.readline())) # '' ← 文件末尾返回空字符串
循环读取直到末尾:
with open("demo.txt") as f:
while line := f.readline():
print(line, end="")
readlines() —— 读取所有行,返回列表
with open("demo.txt") as f:
lines = f.readlines()
print(lines)
# ['Hello\n', 'World\n', 'Python\n']
print(lines[1]) # 'World\n' ← 可随机访问
内存与性能
文件大小 read() readlines() readline() / for line in f
小文件 ✅ 推荐 ✅ 推荐 可用
大文件 ❌ 占满内存 ❌ 占满内存 ✅ 推荐(惰性逐行)
处理大文件的最佳方式是直接迭代文件对象,效果等同于逐次调用 readline(),但更简洁:
with open("large_file.txt") as f:
for line in f: # 惰性逐行读取,内存友好
process(line)
注意事项
- 三个方法读取的行末尾都保留
\n,需要去除时用line.rstrip("\n")或line.strip()。 read()和readlines()将整个文件载入内存,文件超过几百 MB 时应改用readline()或for line in f。- 文件以二进制模式(
"rb")打开时,返回bytes而非str,行为相同。
总结
- 小文件、需要全文:用
read() - 需要按行索引:用
readlines() - 大文件、逐行处理:用
for line in f或readline()