用Python统计文本的行数的方法是什么,要注意什么事项
Admin 2022-06-20 群英技术资讯 1168 次浏览
关于“用Python统计文本的行数的方法是什么,要注意什么事项”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。通常我们会用wc -l来统计文件行数,不过用Python统计也很简单。
要快速统计一个文本文件中的行数,其实就是要统计这个文本文件中换行符的个数。为了尽量提高速度,我们需要尽量多读一些文本然后一起处理。统计换行符的个数可以用bytes内置的count方法。
代码如下:
from __future__ import print_function
import time
if __name__ == '__main__':
import sys
start = time.time()
with open(sys.argv[1],'rb') as f:
count = 0
last_data = '\n'
while True:
data = f.read(0x400000)
if not data:
break
count += data.count(b'\n')
last_data = data
if last_data[-1:] != b'\n':
count += 1 # Remove this if a wc-like count is needed
end = time.time()
print(count)
print((end-start) * 1000)
上面的代码中,我们将文件尾没有换行符的不完整的部分也算作一行,这跟wc -l略有区别,如果要跟wc -l一致的话,可以将带注释的行删掉。
这里没有处理universal newline、忽略空行等逻辑,如果需要这些功能,程序会变得复杂一些。
使用三个文本文件进行测试,分别有一千万行、一亿六千万行、六亿四千万行。先用wc -l运行两次,然后用Python的wc.py。
运行结果:
[root@yz- test]# docker run -it --rm -v `pwd`:/opt/workspace python:3 bash -c "cd /opt/workspace && time wc -l text.txt && time wc -l text.txt && time python3 wc.py text.txt" 10000000 text.txt real 0m0.086s user 0m0.072s sys 0m0.013s 10000000 text.txt real 0m0.080s user 0m0.060s sys 0m0.019s 10000000 64.38159942626953 real 0m0.150s user 0m0.100s sys 0m0.033s [root@yz- test]# docker run -it --rm -v `pwd`:/opt/workspace python:3 bash -c "cd /opt/workspace && time wc -l text3.txt && time wc -l text3.txt && time python3 wc.py text3.txt" 160000000 text3.txt real 0m1.322s user 0m0.991s sys 0m0.318s 160000000 text3.txt real 0m1.313s user 0m0.966s sys 0m0.341s 160000000 838.7012481689453 real 0m0.908s user 0m0.595s sys 0m0.297s [root@yz- test]# docker run -it --rm -v `pwd`:/opt/workspace python:3 bash -c "cd /opt/workspace && time wc -l text4.txt && time wc -l text4.txt && time python3 wc.py text4.txt" 640000000 text4.txt real 0m5.805s user 0m4.349s sys 0m1.455s 640000000 text4.txt real 0m5.787s user 0m4.342s sys 0m1.445s 640000000 3323.5926628112793 real 0m3.399s user 0m2.255s sys 0m1.108s
可以看到Python实际上是比wc -l更快的,主要因为纯Python的步骤很少,大部分时间都在read(),count()这样的C实现的过程中。wc更慢的原因猜想可能是默认的缓冲区更小,所以需要更多的read()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天很有可能你已经做了一些使用滑动窗口(也称为移动窗口)的事情,而你甚至不知道它。例如:许多编辑算法都是基于移动窗口的。在GIS中做地形分析的大多数地形栅格度量(坡度、坡向、山坡阴影等)都基于滑动窗口。很多情况下,对格式化为二维数组的数据进行分析时,都很有可能涉及到滑动窗口。滑动窗口操作非常普遍,非常有用。它们也很容易在Python中实现。学习如何实现移动窗口将把你的数据分析和争论技能提升到一个新的水平。
这篇文章主要为大家介绍了Caffe卷积神经网络视觉层Vision Layers及参数详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要为大家介绍了Pytorch搭建YoloV4目标检测平台实现源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要为大家介绍了Python的捕捉异常,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
本篇文章给大家带来了关于Python的相关知识,其中主要介绍了Python 列表的索引取值,本节重点掌握多次索引取值的语法:列表[索引][索引],结合示例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008