使用
打开/读取文件时with open(<csv_file>) as f:
df = pandas.read_csv(f)
可能会出现诸如
的错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 1678
我知道我可以使用vscode扩展名将字符定位在csv_file中的位置1678。但是有什么方法可以使用python做到这一点。天真地像。
>>getCharInPosition(1678)
"The character is that position is 'x'"
甚至更好,获得行号
>>getLineNumOfCharInPosition(1678)
"The line number for the character in that position is 25"
我正在寻找一种使标准UnicodeDecodeError消息比仅告诉我字符位置更有用的方法。
答案 0 :(得分:0)
UnicodeError
的属性中有很多信息。
通过捕获异常,您可以利用此漏洞找到有问题的字节:
try:
df = pandas.read_csv(f)
except UnicodeError as e:
offending = e.object[e.start:e.end]
print("This file isn't encoded with", e.encoding)
print("Illegal bytes:", repr(offending))
raise
为了确定行号,您可以执行以下操作(在except子句中):
seen_text = e.object[:e.start]
line_no = seent_text.count(b'\n') + 1
...但是我不确定e.object
是否始终是一个(字节)字符串(这可能会给大型文件带来额外的麻烦),所以我不知道它是否始终有效。
此外,在CSV文件中,如果某些单元格中有换行符,则换行符的数量可能大于逻辑行的数量。