在 Python 中,readline() 和 readlines() 都是用于从文件对象中读取内容的方法,但它们的行为和返回方式有显著区别:
1. readline()
-
功能 :每次调用读取文件中的一行 (包括换行符
\n)。 -
返回值 :返回一个字符串(
str),代表当前行的内容;如果文件结束,则返回空字符串''。 -
惰性(Lazy)特性 :✅ 是惰性的。它不会一次性把整个文件加载进内存,而是按需读取一行,适合处理大文件。
-
典型用法:
with open('file.txt') as f: line = f.readline() while line: print(line.strip()) line = f.readline()或更常见的写法(利用文件对象本身是可迭代的):
with open('file.txt') as f: for line in f: # 内部使用类似 readline 的机制,也是惰性的 print(line.strip())
2. readlines()
-
功能 :一次性读取整个文件的所有行。
-
返回值 :返回一个列表(list),每个元素是一行(包含换行符)。
-
惰性(Lazy)特性 :❌ 不是惰性的。它会立即把整个文件内容读入内存,生成一个完整的列表。
-
典型用法 :
with open('file.txt') as f: lines = f.readlines() for line in lines: print(line.strip())
⚠️ 注意:对于大文件,
readlines()可能导致内存不足。
总结对比
| 方法 | 返回类型 | 是否惰性 | 内存占用 | 适用场景 |
|---|---|---|---|---|
readline() |
str |
✅ 是 | 低(一次一行) | 大文件、流式处理 |
readlines() |
list[str] |
❌ 否 | 高(全文件) | 小文件、需要随机访问 |
补充说明
- 文件对象本身是可迭代的 ,推荐使用
for line in file:的方式遍历文件,这本质上是惰性的,且代码简洁高效。 - 如果你使用的是 Python 3,所有这些方法默认以文本模式读取(返回
str),二进制模式则返回bytes。
✅ 结论 :
readline() 是惰性返回的 ,而 readlines() 不是。处理大文件时应优先使用 readline() 或直接迭代文件对象。