我正在尝试使用以下语句读取文本文件:
with open(inputFile) as fp:
for line in fp:
if len(line) > 0:
lineRecords.append(line.strip());
问题是出现以下错误:
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 6880: character maps to <undefined>
我的问题是我如何才能准确确定错误在文件中的哪个位置,因为Python给出的位置与当时正在读取的记录中的位置(而不是文件中的绝对位置)相关联。那么是记录20中的6,880个字符还是记录2000中的6,880个字符?没有记录信息,Python返回的位置值就一文不值。
底线:是否有办法让Python告诉我在遇到错误时它正在处理什么记录?
(是的,我知道0x9d是制表符,我可以进行搜索,但这不是我想要的。)
谢谢。
更新:UnicodeEncodeError: 'charmap' codec can't encode - character maps to <undefined>, print function上的帖子与我所问的问题无关-这是我如何让Python告诉我它遇到unicode错误时正在读取输入文件的记录。
答案 0 :(得分:1)
我认为唯一的方法是单独跟踪行号并自己输出。
with open(inputFile) as fp:
num = 0
try:
for num, line in enumerate(fp):
if len(line) > 0:
lineRecords.append(line.strip())
except UnicodeDecodeError as e:
print('Line ', num, e)
答案 1 :(得分:0)
您可以使用文件对象的read
方法来获取前6880个字符并对其进行编码,结果字节对象的长度将成为有问题的字符的起始字节的索引:>
with open(inputFile) as fp:
print(len(fp.read(6880).encode()))
答案 2 :(得分:0)
我以前曾经遇到过这个问题,最简单的解决方法是以utf8模式打开文件
with open(inputFile, encoding="utf8") as fp: