我有压缩格式的大型日志文件。ie,largefile.gz,这些通常是4-7个,每个.
下面是代码的相关部分:
for filename in os.listdir(path):
if not filename.startswith("."):
with open(b, 'a') as newfile, gzip.GzipFile(path+filename,'rb') as oldfile:
# BEGIN Reads each remaining line from the log into a list
data = oldfile.readlines()
for line in data:
parts = line.split()
在此之后,代码将进行一些计算(基本上是将字节加起来),并将写入一个文件,该文件显示“x critera =y的总字节”。所有这些都可以在一个小文件中很好地工作。但是在一个大文件中,它杀死了系统。
我认为我的程序所做的是读取整个文件,并将其存储在data中,如果我错了,请纠正我的错误,但我认为它试图首先将整个日志放入内存中。
问:我如何从压缩文件中读取1行文件,然后处理它,然后转移到下一行,而不首先将整个文件存储在内存中?(或者它真的已经这么做了..。我不确定,但根据查看活动监视器的结果,我猜它是在尝试记忆)
谢谢
发布于 2017-01-31 00:43:00
直到你告诉它,它才把所有的内容存储在内存中。也就是说--而不是:
# BAD: stores your whole file's decompressed contents, split into lines, in data
data = oldfile.readlines()
for line in data:
parts = line.split()
...use:
# GOOD: Iterates a line at a time
for line in oldfile:
parts = line.split()
...so --您没有将整个文件存储在变量中。显然,也不要将parts
存储在超过一行的任何地方。
就这么简单。
https://stackoverflow.com/questions/41947907
复制相似问题