readlines()适合小文件且需索引访问;2. for line in f最推荐,内存高效;3. readline()可精确控制但代码繁琐;4. 生成器适合超大文件。日常优先用for循环读取,避免内存浪费。

python中按行读取文件有多种方法,每种方式在内存使用、速度和适用场景上有所不同。下面介绍几种常见的方法,并对比它们的特点,帮助你根据实际需求选择最合适的方式。
1. readlines():一次性读取所有行
使用 readlines() 方法会将整个文件的所有行加载到一个列表中,每一行作为一个元素。
示例:
<pre class="brush:php;toolbar:false;">with open('file.txt', 'r') as f:<br> lines = f.readlines()<br>for line in lines:<br> print(line.strip())
优点: 可以多次遍历,支持索引操作。
缺点: 文件较大时会占用大量内存,不适合处理大文件。
2. for line in file:逐行迭代(推荐)
直接对文件对象进行迭代,每次读取一行,内存友好。
示例:
<pre class="brush:php;toolbar:false;">with open('file.txt', 'r') as f:<br> for line in f:<br> print(line.strip())
优点: 内存效率高,适合大文件,代码简洁。
缺点: 仅支持单次遍历,不能通过索引访问某一行。
3. readline():逐行读取(一次一行)
使用 readline() 每次调用返回一行内容,读到文件末尾返回空字符串。
立即学习“Python免费学习笔记(深入)”;
示例:
<pre class="brush:php;toolbar:false;">with open('file.txt', 'r') as f:<br> while True:<br> line = f.readline()<br> if not line:<br> break<br> print(line.strip())
优点: 精确控制读取过程,适合需要条件跳出的场景。
缺点: 代码较繁琐,性能略低于直接 for 循环。
4. 使用生成器或逐块处理超大文件
对于极大型文件,可以自定义生成器按需读取,进一步优化内存。
示例:
<pre class="brush:php;toolbar:false;">def read_lines(f_path):<br> with open(f_path, 'r') as f:<br> for line in f:<br> yield line.strip()<br><br>for line in read_lines('huge_file.txt'):<br> print(line)
这种方式结合了惰性加载和可复用性,适合复杂数据流处理。
基本上就这些。日常使用中,for line in f 是最推荐的方式,兼顾简洁与效率。只有在需要重复访问或随机读取行时才考虑 readlines(),而处理超大文件建议使用生成器模式。不复杂但容易忽略的是内存控制,选对方法能避免程序崩溃。


