2015-04-15 45 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中变得杂乱无章。 –