如何利用Python快速统计文本的行数 通常我们会用wc -l来统计文件行数,不过用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()
到此这篇关于如何利用Python快速统计文本的行数的文章就介绍到这了,更多相关Python快速统计文本的行数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
本文标题为:如何利用Python快速统计文本的行数
- 在centos6.4下安装python3.5 2023-09-04
- CentOS7 安装 Python3.6 2023-09-04
- Python实现将DNA序列存储为tfr文件并读取流程介绍 2022-10-20
- python线程池ThreadPoolExecutor与进程池ProcessPoolExecutor 2023-09-04
- Python Pandas如何获取和修改任意位置的值(at,iat,loc,iloc) 2023-08-04
- Python之路-Python中的线程与进程 2023-09-04
- Python 保存数据的方法(4种方法) 2023-09-04
- python中列表添加元素的几种方式(+、append()、ext 2022-09-02
- python中defaultdict用法实例详解 2022-10-20
- windows安装python2.7.12和pycharm2018教程 2023-09-03