Python islice正在阅读相同的行

时间:2013-04-05 07:48:00

标签: python readfile readlines

我有一个应该分析的大日志文件(> 1GB),所以我编写了一个python程序。我使用了islice所以我可以用块(10,000行)读取文件,这样我的服务器就不会耗尽内存。

我在stackoverflow上查找了一些islice个解决方案并实现了一个,但是程序没有按预期工作,因为isclice每次读取相同的行(但在读取整个文件后正确停止.. )。我不能使用with open因为它带有python 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)

你知道什么是错的吗?

提前致谢。 问候,约翰。

2 个答案:

答案 0 :(得分: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 =>我可以按顺序看到显示的行。

错误肯定来自您的其他功能,您可以更新您的问题吗?

答案 1 :(得分: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:
            ...