Python3读取文件指定行的三种方法
本文深入探讨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读取文件指定行的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









