2013-04-05 96 views
2

我有一个大的日志文件(> 1GB)应该被分析,所以我写了一个python程序。我已经使用islice,所以我可以读取文件块(10,000行),这样我的服务器不会用完内存。Python islice正在读取相同的行

我查阅了一些关于stackoverflow的islice解决方案并实现了一个,但程序无法按预期工作,因为isclice每次都读取相同的行(但在读完整个文件后正确停止...)。我不能使用with open因为它与Python 2.5,我有蟒蛇2.4 ...

我的代码如下所示:

n = 100000;  # n lines 
    inf = open(fn, "r") 
    while True: 
     next_n_lines = list(islice(inf, n)) 
     if not next_n_lines: 
      break 
     out_fn = produce_clean_logfile(next_n_lines) 
     a, t = main(out_fn) 
     send_log(a,t) 

你知道什么是错的?

在此先感谢。 问候,约翰。

+1

我试图从itertools的islice和它的作品。 因此,你的社交实现是错误的,如果你需要帮助,你应该发布它。 – lc2817 2013-04-05 07:55:42

+0

在我的脚本之上,我写了'from itertools import islice' ...或者你是什么意思?我的'islice'代码在我的问题中 - 文字... – 2013-04-05 07:58:50

+1

你是对的,还有另外一个问题。我已经测试了一个愚蠢的20行文件,它的工作原理,所以我必须在另一个地方搜索!感谢您的回答! – 2013-04-05 08:12:58

回答

3
from itertools import islice 
n = 2;  # n lines 
fn = "myfile" 
inf = open(fn, "r") 
while True: 
    next_n_lines = list(islice(inf, n)) 
    if not next_n_lines: 
     break 
    print next_n_lines 

适合我python 2.5,2.6,2.7 =>我可以看到按顺序显示的行。

该错误肯定来自您的其他功能,你能否更新你的问题?

+0

你是对的,还有另一个问题。我已经测试了一个愚蠢的20行文件,它的工作原理,所以我必须在另一个地方搜索!感谢您的回答! – 2013-04-05 08:13:29

2

您可以使用GROUPBY这个

from itertools import groupby, count 
with open(filename, 'r') as datafile: 
    groups = groupby(datafile, key=lambda k, line=count(): next(line)//10000) 
    for k, group in groups: 
     for line in group: 
      ...