如何利用Python快速统计文本的行数

??通常我们会用wc -l来统计文件行数,不过用Python统计也很简单。
要快速统计一个文本文件中的行数,其实就是要统计这个文本文件中换行符的个数。为了尽量提高速度,我们需要尽量多读一些文本然后一起处理。统计换行符的个数可以用bytes内置的count方法。
【如何利用Python快速统计文本的行数】代码如下:

from __future__ import print_functionimport timeif __name__ == '__main__':import sysstart = time.time()with open(sys.argv[1],'rb') as f:count = 0last_data = 'https://www.it610.com/n'while True:data = f.read(0x400000)if not data:breakcount += data.count(b'\n')last_data = https://www.it610.com/article/dataif last_data[-1:] != b'\n':count += 1 # Remove this if a wc-like count is neededend = 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.txtreal0m0.086suser0m0.072ssys0m0.013s10000000 text.txtreal0m0.080suser0m0.060ssys0m0.019s1000000064.38159942626953real0m0.150suser0m0.100ssys0m0.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.txtreal0m1.322suser0m0.991ssys0m0.318s160000000 text3.txtreal0m1.313suser0m0.966ssys0m0.341s160000000838.7012481689453real0m0.908suser0m0.595ssys0m0.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.txtreal0m5.805suser0m4.349ssys0m1.455s640000000 text4.txtreal0m5.787suser0m4.342ssys0m1.445s6400000003323.5926628112793real0m3.399suser0m2.255ssys0m1.108s

可以看到Python实际上是比wc -l更快的,主要因为纯Python的步骤很少,大部分时间都在read(),count()这样的C实现的过程中。wc更慢的原因猜想可能是默认的缓冲区更小,所以需要更多的read()
到此这篇关于如何利用Python快速统计文本的行数的文章就介绍到这了,更多相关Python快速统计文本的行数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读