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

Jad*_*ias 4 python file-io utf-8 python-3.x

我正在迭代一个文件

for line in io.TextIOWrapper(readFile, encoding = 'utf8'):
Run Code Online (Sandbox Code Playgroud)

当文件包含以下行时

b'"""\xea\x11"\t1664\t507\t137\t2\n'
Run Code Online (Sandbox Code Playgroud)

这会产生以下异常

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

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

kal*_*rtt 6

errors='ignore'参数传递给TextIOWrapper.此处指定其他可用选项.

  • 问题是这会无声地跳过无效字符,所以它不会让你忽略整行(甚至知道你要忽略哪一行). (2认同)

aba*_*ert 6

如果你真的想忽略整行,如果它有任何无效字符,你必须知道有无效字符.这意味着你不能使用TextIOWrapper,而必须手动解码线.你想要做的是:

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

但请注意,这不会给您与使用文本文件相同的换行符; 如果你需要,你也需要明确这一点.