Python高效统计文本行数的实现与性能对比

陆遥
陆遥
发布时间:2026-10-15 | 5人浏览过
原创

本文介绍如何使用Python高效统计文本文件行数。通过读取二进制数据并利用bytes的count方法,可显著提升处理速度。实测显示,Python方案在一千万至六亿四千万行的大文件测试中,耗时低于系统命令wc -l,主要得益于C底层实现的优化。

Python统计行数的高效实现

在Linux系统中,我们通常使用wc -l命令来统计文件的行数,但实际上,使用Python来实现这一功能同样简便且高效。

统计文本文件行数的核心在于计算文件中换行符的数量。为了最大化处理速度,应当尽可能多地读取文本内容,然后一次性进行处理。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 相关产品和应用

全部下载

专题列表