使用python3怎么读取文件指定行?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
在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多一些。
虽然在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,还不如我们自己手动实现的循环遍历方案。因此如果是对于性能有一定要求的场景,是不建议采用这个方案的。
我们知道用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 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
1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Python开发。3.人工智能应用,基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python。4、系统运维工程项目,自动化运维的标配就是python+Django/flask。5、金融理财分析,量化交易,金融分析。6、大数据分析。
看完上述内容,你们掌握使用python3怎么读取文件指定行的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。