我有一个应该分析的大日志文件(> 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)
你知道什么是错的吗?
提前致谢。 问候,约翰。
答案 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:
...