2012-01-05 202 views
0

我試圖從日誌文件中打印包含單詞的行。使用Python在日誌文件中讀取/寫入特定行

我已經做了一些研究,至今還沒有找到一個很好的實現方法。

我現在有這樣的代碼:

FileInput = open(FILE, "r", encoding='utf-8') 

for line in FileInput: 
    if "DATA: " in line: 
     print line 

環顧四周之後,似乎是大多數人都在做它的方式,但我得到以下錯誤:類型錯誤:強迫爲Unicode:需要字符串或緩衝區,NoneType發現。

我知道從「DATA:」設置的長度,行以十六進制值0A結束。

+0

「0A的十六進制值」 - 您是指換行符?這是Python 2還是Python 3? – 2012-01-05 13:16:36

+0

是的,就像在一個新的行中。我不知道用十六進制或逐行掃描數據的最佳方法是什麼?它是Python 3. – 2012-01-05 13:23:40

+0

在Python 3中,你應該說'print(line)',否則你會得到'SyntaxError'。我有這樣的感覺,這不是你正在使用的確切代碼。 – 2012-01-05 14:18:29

回答

1

無論您的文件變量不包含正確的字符串(我們可以看到在打開文件並在此粘貼結果之前,你可以做「打印(FILE)」的值嗎?),或者文件沒有​​以與utf-8兼容的方式進行編碼。嘗試在一個好的編輯器(如jEdit或Notepad ++)中打開它,看看編輯器告訴你它是什麼,然後指定編碼而不是utf。

+0

包含該變量的SQLite文件中存在破壞。感謝您的幫助。 – 2012-01-05 15:22:02

+0

謝謝Zeki,你能正式接受答案嗎?只需點擊答案左側的複選框大綱即可。 :)乾杯 – 2012-01-05 22:04:14

0

看來你需要使用

import codecs 
f = codecs.open(FILE, encoding='utf-8', mode='r') 

看看這裏Unicode HOWTO

+0

謝謝你的幫助RanRag,但不幸的是我仍然得到相同的錯誤信息。 – 2012-01-05 13:26:04

+0

嘗試在代碼中檢查「如果行不是無」。 – RanRag 2012-01-05 13:31:58

+0

仍然是一樣的錯誤。再次感謝您的持續幫助。 – 2012-01-05 14:57:41

0

試試這個:

FileInput = open(FILE, "r") 
for line in FileInput: 
    if "DATA: " in line: 
     print(line) 
+0

我試過所有可能的變化,但仍然在FileInput部分獲得相同的錯誤。 謝謝你的幫助。 – 2012-01-05 14:56:39