Python读取文件时如何跳过引发解码错误的行?
解决Python读取文件时跳过解码错误行的问题
你的代码存在两个核心问题:
- 文本模式下
readline()触发UnicodeDecodeError时,文件指针会停在出错的字节位置,后续调用next(f)会导致指针混乱,无法正常读取后续行。 - 文件末尾调用
next(f)会直接抛出StopIteration错误,导致程序崩溃。
推荐使用二进制模式读取+逐行解码的方式,精准跳过解码失败的整行,代码如下:
with open('patients.txt', 'rb') as f: for line_bytes in f: try: # 替换为你文件实际使用的编码,比如gbk、utf-16等 line = line_bytes.decode('utf-8') print(line, end='') except UnicodeDecodeError: print('Error reading line, skipping line')
代码说明:
- 用
rb二进制模式打开文件,遍历文件对象会自动按行读取字节数据,避免文本模式下提前触发解码错误。 - 对每一行字节单独尝试解码,失败则直接跳过该行,不影响其他行的读取流程。
- 使用
with语句自动管理文件资源,无需手动关闭文件,更安全可靠。
原代码失效原因:
文本模式下,readline()遇到无法解码的字节时会直接抛出错误,此时文件指针并未移动到下一行起始位置,后续的next(f)会继续从出错字节处读取,导致后续行读取依然失败,甚至在文件末尾触发StopIteration异常。
内容的提问来源于stack exchange,提问作者gnwxla
相关产品推荐
相关产品推荐

