跳到主要内容

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()