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

这篇具有很好参考价值的文章主要介绍了python读取文件指定行的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.行遍历实现

在python中如果要将一个文件完全加载到内存中,通过file.readlines()即可,但是在文件占用较高时,我们是无法完整的将文件加载到内存中的,这时候就需要用到python的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

可以看到这里的耗时为10s多一些。

2.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

虽然在实现方式上简化了许多,但是我们发现这个实现的用时超过了11s,还不如我们自己手动实现的循环遍历方案。因此如果是对于性能有一定要求的场景,是不建议采用这个方案的。

3.命令行sed获取

我们知道用Linux系统本身自带的sed指令也是可以获取到文件指定行或者是指定行范围的数据的,其执行指令为:sed -n 50000000p filename即表示读取文件的第50000000行的内容。同时结合python的话,我们可以在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

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
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.toymoban.com/news/detail-861314.html

到了这里,关于python读取文件指定行的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab 读取txt文件指定行的数据

     在上述代码中,首先指定要读取的文件名和行号。然后使用 fopen 函数 打开文件,使用一个 for 循环跳过前面的行, 直到达到目标行。最后使用 fgetl 函数读取目标行并关闭文件。最后,将目标行内容输出到命令窗口。 使用 textscan()函数 textscan函数用法:https://ww2.mathworks.cn

    2024年02月16日
    浏览(74)
  • 【100个 Unity实用技能】☀️ | Unity读取本地文件(Json,txt等)的三种方法示例

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(65)
  • python下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块,此外Python还提供了另外一种方法requests。 下面来看看三种方法是如何来下载文件的: 方法一: 方法二: 方法三: 看起来使用urllib最为简单,一句语句即可。当然你可以把urllib2缩写成

    2024年02月16日
    浏览(54)
  • Python将list保存到文件的三种方法

    输出展示: 输出展示: 输出展示: 借鉴链接(代码来源)

    2024年02月11日
    浏览(56)
  • Python读取指定的TXT文本文件并从中提取指定数据的方法

      本文介绍基于 Python 语言,遍历文件夹并从中找到文件名称符合我们需求的多个 .txt 格式文本文件,并从上述 每一个文本文件 中,找到 我们需要的指定数据 ,最后得到 所有文本文件中 我们 需要的数据的合集 的方法。   首先,我们来明确一下本文的具体需求。现有

    2024年02月14日
    浏览(54)
  • java删除文件或目录的三种方法

    传统删除是利用IO流,本文利用NIO流实现。 代码如下(示例): 代码如下(示例): 代码如下(示例): 利用NIO流的好处: 1.如果删除失败,可以给出错误的具体原因; 2.代码不多,效率高。

    2024年02月10日
    浏览(65)
  • linux修改文件名的三种方法

    我们在使用linux系统过程中为了便于记忆或整理维护,经常需要对文件名进行修改,下面文章介绍了linux系统的三种修改文件名称的方式。 语法:mv [options] source dest 参数说明: 示例:将a.txt修改为a1.txt 语法:cp [options] source dest 参数说明: 示例:将a.txt修改为a1.txt,通过cp命令

    2024年02月02日
    浏览(55)
  • Linux中修改文件名的三种方法

      在Linux操作系统中,对文件名的修改是一项常见且至关重要的操作。文件名修改的需求多样,包括但不限于:促进文件组织的清晰性、确保命名符合特定规则,以及简单地修复拼写错误。与通过图形界面直接下载后修改文件名相比,采用命令行方式进行文件名修改,能够带

    2024年01月17日
    浏览(58)
  • Allegro文件导入SIwave仿真的三种方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在进行PCB板级(SI/PI/EMC)仿真时,第一步需要将PCB文件导入至仿真软件中。这里分享三个将Allegro PCB导入SIwave的方法,分别借助了ODB++、EDB、ANSYS ALinks进行中转。 Allegro不自带ODB++,因此该插件需要进行额

    2024年02月02日
    浏览(47)
  • Linux下修改文件名的三种方法

    在Linux系统中,有多种方法可以用来修改文件名。以下是三种常用的方法: 1. 使用 mv 命令 mv 命令是最基本也是最直接的方式来重命名文件。它的基本语法是: 打开终端 :首先,你需要打开一个命令行终端。 定位到文件所在目录 :使用 cd 命令进入包含你想要重命名的文件的

    2024年01月17日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包