如何忽略文件中的无效行?

时间:2013-12-17 01:13:25

标签: python file-io python-3.x utf-8

我正在迭代一个文件

for line in io.TextIOWrapper(readFile, encoding = 'utf8'):

当文件包含以下行

b'"""\xea\x11"\t1664\t507\t137\t2\n'

生成以下异常

  

UnicodeDecodeError:'utf-8'编解码器无法解码位置的字节0xea   3:无效的连续字节

如何让我的脚本忽略这些行并继续使用好的行?

3 个答案:

答案 0 :(得分:6)

errors='ignore'参数传递给TextIOWrapper。还有其他可用的选项here

答案 1 :(得分:6)

如果你确实想要忽略整行,如果它有任何无效字符,你必须知道有无效字符。这意味着您无法使用TextIOWrapper,而必须手动解码这些行。你想要做的是:

for bline in readFile:
    try:
        line = bline.decode('utf-8')
    except UnicodeDecodeError:
        continue
    # do stuff with line

但请注意,这并不会像使用文本文件那样提供相同的换行符;如果你需要,你也需要明确这一点。

答案 2 :(得分:3)

我认为您可以传递errors参数:

io.TextIOWrapper(readfile, encoding='utf-8', errors='ignore')