[python 3.4] 有一个混合了日语和二进制文件的UTF-8文件。 我尝试用以下代码读取行:
line = None
linecount = 0
with codecs.open(destfile, 'r', 'utf-8') as fd:
while True:
try:
line = fd.readline()
linecount += 1
except UnicodeDecodeError:
continue
if not line:
break;
print(linecount)
尝试忽略具有二进制代码的行,但它会停止与二进制代码一致。
如何正确读取文件,忽略二进制代码行
答案 0 :(得分:0)
readline
读取更大的块,解码和缓冲区。如果你遇到一个无效的utf-8字符,你将在该无效块中丢失多行。为了使事情变得复杂,即使您认为某些数据是二进制的,它可能看起来像有效的utf-8并且无错误地解码。此外,实际上还没有像二进制线那样的东西。因为行只是由0A
字节或0D0A
序列分隔的字节序列。但这些都是二进制数字,所以说它们意味着终止一条线而不是仅仅是二进制数据的一部分。
考虑到这一点,你可以在新线上解决问题后进一步解码:
line = None
linecount = 0
for line in open(destfile, 'rb'):
try:
line = line.decode('utf-8')
linecount += 1
except UnicodeDecodeError:
pass
print(linecount)