Python无法处理重文件



我有一个压缩(.gz)日志文件logfile.20221227.gz。我正在写一个python脚本来处理它。我做了一个有100行文件的测试运行,脚本工作得很好。当我在实际日志文件上运行相同的脚本时,几乎5GB的脚本被破坏了。请注意,我能够处理最大2GB的日志文件。不幸的是,唯一比这更重的日志文件是5GB+或7GB+,脚本在这两种情况下都失败了。我的代码如下:

count = 0
toomany = 0 
maxhits = 5000
logfile = '/foo/bar/logfile.20221228.gz'
with gzip.open(logfile, 'rt', encoding='utf-8') as page:
for line in page:
count += 1
print("nFor loop count is: ",count)
string = line.split(' ', 5)
if len(string) < 5:
continue
level = string[3]
shortline = line[0:499]
if level == 'FATAL':
log_lines.append(shortline)
total_fatal += 1
elif level == 'ERROR':
log_lines.append(shortline)
total_error += 1
elif level == 'WARN':
log_lines.append(shortline)
total_warn += 1
if not toomany and (total_fatal + total_error + total_warn) > max_hits:
toomany = 1
if len(log_lines) > 0:
send_report(total_fatal, total_error, total_warn, toomany, log_lines, max_hits)

输出:

For loop count is:  1
.
.
For loop count is:  192227123    
Killed

这里的Killed是什么意思?它没有提供太多的调查,只是用这一个关键字。文件大小是否有限制,是否有办法绕过它。

谢谢。

从更新后的代码来看,这可能是内存问题,因为log_lines变得很大

尝试将shortline写入临时文件而不是log_lines.append,然后最后通过电子邮件发送该文件(或其内容)。

但是首先检查文件有多大,因为它可能会变得太大而无法通过电子邮件发送。然后你可以试着把它拉上。您可能还想直接将临时文件写入gz:

import gzip
with gzip.open('./log_lines.txt.gz', 'wb') as log_lines:
with gzip.open(logfile, 'rt', encoding='utf-8') as page:
# ...
log_lines.write(shortline)

最新更新