python的速度问题_Python文本文件处理速度问题

在Python(至少<= 2.6.x)中,gzip格式的解析是在Python中实现的(在zlib上).更重要的是,它似乎在做一些奇怪的事情,即解压缩到文件的最后到内存,然后丢弃超出所请求的读取大小的所有内容(然后再次进行下一次读取).免责声明:我刚刚看了gzip.read()3分钟,所以我可能在这里错了.无论我对gzip.read()的理解是否正确,gzip模块似乎没有针对大型数据卷进行优化.尝试在Perl中执行相同的操作,即启动外部进程(例如,参见模块子进程). 编辑

实际上,我错过了OP的关于普通文件I / O的说法与压缩一样慢(感谢ire_and_curses指出它).这使我不可能,所以我做了一些测量…

from timeit import Timer

def w(n):

L = "*"*80+"\n"

with open("ttt","w") as f:

for i in xrange(n) :

f.write(L)

def r():

with open("ttt","r") as f:

for n,line in enumerate(f) :

if n % 1000000 == 0 :

print n

def g():

f = gzip.open("ttt.gz","r")

for n,line in enumerate(f) :

if n % 1000000 == 0 :

print n

现在,运行它…

>>> Timer("w(10000000)","from __main__ import w").timeit(1)

14.153118133544922

>>> Timer("r()","from __main__ import r").timeit(1)

1.6482770442962646

# here i switched to a terminal and made ttt.gz from ttt

>>> Timer("g()","from __main__ import g").timeit(1)

…并且休息一下,发现它还在运行,我杀了它,对不起.然后我尝试了100’000行而不是10’000’000:

>>> Timer("w(100000)","from __main__ import w").timeit(1)

0.05810999870300293

>>> Timer("r()","from __main__ import r").timeit(1)

0.09662318229675293

# here i switched to a terminal and made ttt.gz from ttt

>>> Timer("g()","from __main__ import g").timeit(1)

11.939290046691895

模块gzip的时间是O(file_size ** 2),所以数量级数百万,gzip读取时间不能与平常读取时间相同(我们看到一个实验确认).匿名,请重新检查.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值