2015-04-15 69 views
0

我嘗試使用Python讀取文件。記事本顯示有200行。如何在遇到假EOF時繼續閱讀文件?

f = open('record.txt', 'r') 
for line in f.readlines(): 
    print line 

Apurrently有錯誤的第17行,並且讀取過程遇到錯誤的EOF。那麼如何跳過假EOF並讀取其餘行?謝謝。

線17看起來像這樣:Iˌ$hǃɓǃ ɓI˔$hǃɓǃ ɓBɔ+Iʅ뭶DtHăɓǃ ɓBɔ+LΨBDŽ+Ĥhǃɓǃ ɓBɔ+Iʅ뭶DtHăɓǃ ɓBɔ+LΨBDŽ+ĤhLΨC

回答

1

看着給你行樣品,你顯然是想讀在文本模式下的二進制文件。

你必須使用二進制模式來讀取二進制文件,以避免不同類型的問題,包括歪曲行結束,由於EOF控制字符過早停止讀取,在轉碼爲UTF8時丟失信息,反之亦然(因爲所有UTF編碼都是有損)等等。

Binary mode is enabled by adding "b" to list of your mode chars:

f = open('record.txt', 'rb') 
for line in f.readlines(): 
    print line 

而且,以供將來參考,.readlines()讀取存儲整個文件一次,這可能是不必要的,如果文件很大。通常迭代文件通常會更好 - 它與.readlines()相同,但是會逐行讀取行。因此,它可以如此簡單:

f = open('record.txt', 'rb') 
for line in f: 
    print line 

但是,如果您的文件在讀取時可能會發生變化,這是不適用的。

+0

謝謝你,@modchan。我發現原因是我將這個linux文件複製到windows並試圖讀取它。原始文件是文本文件,但是一些行(如line17)包含unicode字母,這些字母在Windows中變得雜亂無章。 –