使用for循环python3解析UnicodeDecodeError文件

时间:2016-03-10 18:23:12

标签: python python-2.7 python-3.4 unicode-string

当我在文件中循环行时,我得到了UnicodeDecodeError。

with open(somefile,'r') as f:
    for line in f:
        #do something

当我使用python 3.4时会发生这种情况。 一般来说,我有一些文件包含一些没有UTF-8字符。我想逐行解析文件并找到问题apper的行,并在非utf-8出现的地方得到精确的索引。我已准备好它的代码,但它的工作原理是python 2.7.9但是在python 3.4下我执行for循环时得到了UnicodeDecodeError。 有任何想法吗???

1 个答案:

答案 0 :(得分:1)

您需要以二进制模式打开文件并一次解码一行。试试这个:

with open('badutf.txt', 'rb') as f:
    for i, line in enumerate(f,1):
        try:
            line.decode('utf-8')
        except UnicodeDecodeError as e:
            print ('Line: {}, Offset: {}, {}'.format(i, e.start, e.reason))

这是我在Python3中得到的结果:

Line: 16, Offset: 6, invalid start byte

果然,第16行,第6位是坏字节。