您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python文本文件处理速度问题

5b51 2022/1/14 8:22:33 python 字数 3506 阅读 557 来源 www.jb51.cc/python

我在 Python中处理大量文件时遇到问题.我所做的一切都是 f = gzip.open(pathToLog, 'r') for line in f: counter = counter + 1 if (counter % 1000000 == 0): print counter f.close 这需要大约10m25s才能打开文件,读

概述

f = gzip.open(pathToLog,'r')
for line in f:
        counter = counter + 1
        if (counter % 1000000 == 0):
                print counter
f.close

这需要大约10m25s才能打开文件,读取行并增加此计数器.

在perl中,处理相同的文件并做了相当多的(一些正则表达式的东西),整个过程大约需要1m17s.

Perl代码

open(LOG,"/bin/zcat $logfile |") or die "Cannot read $logfile: $!\n";
while (<LOG>) {
        if (m/.*\[svc-\w+\].*login result: Successful\.$/) {
                $_ =~ s/some regex here/$1,$2,$3,$4/;
                push @an_array,$_
        }
}
close LOG;

任何人都可以建议我可以做什么来使Python解决方案以与Perl解决方案相似的速度运行?

编辑
我已经尝试只是解压缩文件,并使用open而不是gzip.open来处理它,但这只会将总时间改变为4m14.972s,这仍然太慢.

我还删除了模数和打印语句,并将其替换为pass,因此现在所做的一切都是从文件文件.

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读取时间不能与平常读取时间相同(我们看到一个实验确认).匿名,请重新检查.

总结

以上是编程之家为你收集整理的Python文本文件处理速度问题全部内容,希望文章能够帮你解决Python文本文件处理速度问题所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶