我是新来的,我想问你一件事。我刚开始用Python编程,我的目标是读取和分析日志文件。
日志文件有数百行有时数千行,每个文件包含一个密钥号。现在我想创建有点子日志文件,它只包含具有特定键编号的行。
首先我创建了search_strings和子日志文件:
search_string1 = str(160000004)
file_out1 = open("outlier.txt","w")
search_string2 = str(160030003)
file_out2 = open("valid.txt","w")
search_string3 = str(150090000)
file_out3 = open("triang.txt","w")
现在我逐行分析主日志文件,并将包含search_strings的行写入子日志文件:
with open ("log.txt","r") as input_file:
for line_number, line in enumerate(input_file):
if search_string1 in line:
file_out1.write(line)
if search_string2 in line:
file_out2.write(line)
if search_string3 in line:
file_out3.write(line)
我现在遇到的问题是文件似乎没有正确写入。如果我打印结果 我得到了289行包含我的search_string。 但是在我的子日志文件中,只写了253行,最后一行甚至没有完成:
160000004 0.00% < fold | 4.31% outlier
160000004 0.00% < fold | 0.00% outlier
160
有谁能告诉我我的错误在哪里?提前致谢!! =)
答案 0 :(得分:1)
默认情况下,出于性能原因缓存文件IO。也就是说,写入文件并不意味着数据立即写入文件,它可能仍然在数据缓冲区中,等待写入。为确保写入所有内容,您需要在文件上调用flush(),这将导致所有等待缓冲区写入磁盘。此外,如果你已完成文件(至少现在) - 关闭它们是个好主意。关闭还将导致所有缓冲区自动刷新。所以,基本上你应该在for循环后添加这段代码:
file_out1.close()
file_out2.close()
file_out3.close()