Python计算大文件行数方法及性能比较
时间:2022-07-23
本文章向大家介绍Python计算大文件行数方法及性能比较,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录[-]
如何使用Python快速高效地统计出大文件的总行数, 下面是一些实现方法和性能的比较。
- 1.readline读所有行 使用
readlines
方法读取所有行:
def readline_count(file_name):
return len(open(file_name).readlines())
- 2.依次读取每行 依次读取文件每行内容进行计数:
def simple_count(file_name):
lines = 0
for _ in open(file_name):
lines += 1
return lines
- 3.sum计数 使用
sum
函数计数:
def sum_count(file_name):
return sum(1 for _ in open(file_name))
- 4.enumerate枚举计数:
def enumerate_count(file_name):
with open(file_name) as f:
for count, _ in enumerate(f, 1):
pass
return count
- 5.buff count 每次读取固定大小,然后统计行数:
def buff_count(file_name):
with open(file_name, 'rb') as f:
count = 0
buf_size = 1024 * 1024
buf = f.read(buf_size)
while buf:
count += buf.count(b'n')
buf = f.read(buf_size)
return count
- 6.wc count 调用使用
wc
命令计算行:
def wc_count(file_name):
import subprocess
out = subprocess.getoutput("wc -l %s" % file_name)
return int(out.split()[0])
- 7.partial count 在buff_count基础上引入
partial
:
def partial_count(file_name):
from functools import partial
buffer = 1024 * 1024
with open(file_name) as f:
return sum(x.count('n') for x in iter(partial(f.read, buffer), ''))
- 8.iter count 在buff_count基础上引入
itertools
模块 :
def iter_count(file_name):
from itertools import (takewhile, repeat)
buffer = 1024 * 1024
with open(file_name) as f:
buf_gen = takewhile(lambda x: x, (f.read(buffer) for _ in repeat(None)))
return sum(buf.count('n') for buf in buf_gen)
下面是在我本机 4c8g python3.6的环境下,分别测试100m、500m、1g、10g大小文件运行的时间,单位秒:
方法 |
100M |
500M |
1G |
10G |
---|---|---|---|---|
readline_count |
0.25 |
1.82 |
3.27 |
45.04 |
simple_count |
0.13 |
0.85 |
1.58 |
13.53 |
sum_count |
0.15 |
0.77 |
1.59 |
14.07 |
enumerate_count |
0.15 |
0.80 |
1.60 |
13.37 |
buff_count |
0.13 |
0.62 |
1.18 |
10.21 |
wc_count |
0.09 |
0.53 |
0.99 |
9.47 |
partial_count |
0.12 |
0.55 |
1.11 |
8.92 |
iter_count |
0.08 |
0.42 |
0.83 |
8.33 |
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统下安装jdbc与tomcat的图文教程
- Linux系统下利用C程序输出某进程的内存占用信息
- .NET Standard中配置TargetFrameworks输出多版本类库
- .NET Standard SDK 样式项目中的目标框架
- 偿还技术债(2)-EventBus自己实现一个?
- AkShare-债券数据-收盘收益率曲线
- Vue 项目报错:‘$‘ is not defined ( no-undef )
- SpringBoot 项目开启热部署
- 小程序文件下载并保存文件名打开
- 分享个 CTF 小工具 bruteHASH
- centos配置mutt和msmtp实现邮件发送
- CentOS8 安装 jdk8 / java8的教程(推荐)
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法
- 详解centos7上elastic search安装及填坑记
- Linux利用Sysctl命令调整内核参数