Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74485
  • 博文数量: 24
  • 博客积分: 82
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-19 12:39
文章分类
文章存档

2012年(14)

2011年(10)

分类:

2012-05-08 14:10:54




文件 压前 160m  压有 32m , 50万条数据 
需求遍历 :  求 行数 
硬盘的 i/o 一般在 60~100m 之间 。


f = gzip.open('1010211955.gz', 'rb')


》耗时 6~7秒
ii=0
for row in f: ii+=1
print ii


》耗时 5~6 秒
ii=0
while 1:
    lines = f.readlines(100000)
    if not lines:
        break
    for line in lines:
        ii+=1
        pass # do something
print ii




》耗时 1.8 m 
ii = 0
br = '' 
try:
    while True:
        rb = f.read(4096*4)
        if not rb:
            break
        #n = rb.count('\n')
        rbs = rb.split('\n') 
        orow = br+rbs[0]
        ii += 1
        for row in rbs[1:-1] :
            ii += 1 
finally:
    f.close( )
print ii


注意 : 使用最后一种方法,和 没解压的  cat 文件 |wc -l  的耗时是一样的 ,但是使用 gz ,网络传送,和转硬盘的 压力都转到 cpu 上 
阅读(935) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~