2014-06-18 49 views
0

我是新來的,我想問你一件事。我剛開始用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 

誰能告訴我在哪裏,我的錯誤是什麼?提前致謝!! =)

+4

你完成循環後關閉你的輸出文件嗎? – Gregor

+0

您正在使用'with'來打開輸入文件;你爲什麼不用它來打開輸出文件?然後這些文件將在with塊的結尾處關閉。 – dawg

回答

1

默認情況下,由於性能原因,文件IO被緩存。也就是說,寫入文件並不意味着數據立即寫入文件,它可能仍然在數據緩衝區中,等待被寫入。爲確保所有內容都已寫入,您需要在文件上調用flush(),這將導致所有等待緩衝區都寫入磁盤。另外,如果你完成了文件(至少現在) - 關閉它是個好主意。關閉還會導致所有緩衝區自動刷新。所以,基本上你應該在for循環後添加這段代碼:

file_out1.close() 
file_out2.close() 
file_out3.close() 
+0

謝謝,它的工作=) – user3754118

相關問題