Python如何高效读取大文件指定两行间内容 避免全量加载
低内存读取大文件指定行区间实现方案
核心思路是利用Python文件对象的迭代器特性逐行读取,全程不加载全量文件内容,内存占用和文件总大小无关,哪怕是十万、百万行级的文件也能稳定运行。
实现逻辑
- 打开文件后直接遍历文件对象,这种方式每次只会把当前行加载到内存,不会像
readlines()一样一次性把所有行读入列表 - 遍历过程中用枚举值记录当前行号,行号小于等于起始行号时直接跳过,不做额外存储
- 行号落在
(start_line, end_line)开区间内时,收集当前行内容(自动剔除末尾换行符) - 行号大于等于结束行号时直接终止遍历,不需要读完文件剩余部分,减少不必要的磁盘IO开销
可直接运行的代码
def between_lines(start_line: int, end_line: int, file_path: str = "target.txt") -> list: result = [] with open(file_path, 'r', encoding='utf-8') as f: for current_line_num, line in enumerate(f): if current_line_num <= start_line: continue if current_line_num >= end_line: break result.append(line.rstrip('\n')) return result # 测试调用 if __name__ == "__main__": print(between_lines(0, 3)) # 针对示例里的a/b/c/d四行文件,输出 ['b', 'c'],完全匹配预期效果
内存表现说明
针对4000行的目标文件,这个实现全程内存占用仅为单条最长行的大小+区间内返回内容的大小,哪怕文件扩容到GB级,只要目标读取的区间长度不大,内存占用始终保持在极低水平,不会出现内存占满的问题。
内容的提问来源于stack exchange,提问作者mzvic
相关产品推荐
相关产品推荐

