Python3读取文件指定行的三种方法

陆遥
陆遥
发布时间:2026-10-14| 3人浏览过
原创

本文深入探讨Python3中读取文件指定行的三种主流方案。针对大文件场景,对比了基于readline的逐行遍历、linecache模块以及调用系统sed命令的执行效率。测试显示,读取5000万行时,sed方案耗时仅约2.5秒,显著优于纯Python实现的10秒以上耗时,为高性能数据处理提供了实用参考。

行遍历实现

在Python中,若需将文件完全加载至内存,可直接使用file.readlines()方法。然而,当文件体积庞大时,这种全量加载方式会导致内存溢出或性能瓶颈。此时,采用file.readline()进行迭代式逐行读取成为更可行的替代方案。


filename = 'hello.txt'

with open(filename, 'r') as file:
    line = file.readline()
    counts = 1
    while line:
        if counts >= 50000000:
            break
        line = file.readline()
        counts += 1

具体实现逻辑为:首先利用with语句安全打开文件,随后结合readline()函数与while循环进行逐行读取。通过设置序号标记来控制循环终止条件,最终输出文件第50000000行的内容。该代码的执行效果如下:


dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m10.359s
user    0m10.062s
sys     0m0.296s

从测试结果可见,此方法的耗时约为10秒多。

linecache实现

尽管Python内置的readline函数未直接提供读取指定行的便捷接口,但标准库linecache提供了相应支持。鉴于其使用方式相对简单,此处直接提供代码示例供参考:


filename = 'hello.txt'

import linecache
text = linecache.getline(filename, 50000000)

该代码的执行结果如下:


dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m11.904s
user    0m5.672s
sys     0m6.231s

虽然linecache方案在代码实现上更为简洁,但实测耗时已超过11秒,甚至高于手动实现的循环遍历方案。因此,在对性能有较高要求的场景下,不建议采用此方案。

命令行sed获取

Linux系统自带的sed指令同样支持获取文件指定行或指定行范围的数据。其执行指令格式为:sed -n 50000000p filename,该命令表示读取文件的第50000000行内容。结合Python使用时,可通过执行系统指令并获取输出结果来实现:


filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(50000000, filename)).read()

需注意,直接调用os.system()无返回值,而os.popen()可返回结果,且需在末尾调用read()选项以获取完整输出。该代码的执行结果如下:


dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.532s
user    0m0.032s
sys     0m0.020s

结果显示,直接使用sed指令的执行速度极快。但需注意,该方法并非在所有场景下都最优,例如以下案例:


filename = 'hello.txt'

import os
result = os.popen('sed -n {}p {}'.format(500, filename)).read()

我们将读取目标从第50000000行调整为第500行,并再次运行程序:


dechin@ubuntu2004:~/projects/gitlab/dechin/$ time python3 get_line.py 

real    0m2.540s
user    0m0.037s
sys     0m0.013s

然而测试发现,读取速度的提升并未随目标行数的减少而显著增加,耗时几乎保持不变。

总结概要

本文通过4个测试案例分析了在Python中读取文件指定行内容的方案,并得到了一些运行耗时的数据。从需求上来说,如果是对于小规模的数据,比如几百行规模的数据,建议使用readline循环遍历来操作,速度也相当不错,或者是linecache中的函数实现也是可以的,甚至可以直接用readlines将整个文本内容加载到内存中。但是对于数据规模比较大的场景,比如超过了千万行的级别,那么使用sed指令的方式对指定行内容进行读取的方式,应该是所有方式中最快速的。

本文首发链接为:https://www.cnblogs.com/dechinphy/p/lbl.html

作者ID:DechinPhy

以上就是python3读取文件指定行的三种方法的详细内容,更多关于python读取文件指定行的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。