2

分析する必要がある大きなログ ファイル (> 1GB) があるため、Python プログラムを作成しました。isliceサーバーがメモリ不足にならないように、ファイルをチャンク (10,000 行) で読み取ることができるように使用しました。

私はislicestackoverflowでいくつかの解決策を調べて実装しましたが、iscliceが毎回同じ行を読んでいるため、プログラムは期待どおりに動作しません(ただし、ファイル全体を読み取った後は正しく停止します...)。with openPython 2.5が付属しているため使用できません.Python 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)

何が悪いかわかりますか?

前もって感謝します。よろしく、ジョン。

4

2 に答える 2

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で動作します=>順番に表示された行を見ることができます。

エラーは確かに他の機能から発生しています。質問を更新できますか?

于 2013-04-05T07:51:32.497 に答える
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:
            ... 
于 2013-04-05T08:14:46.507 に答える