2013-04-05 23 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: 
      ...