Chi*_*nce 17 python file utf-8 python-3.x
我必须将文本文件读入Python.文件编码是:
file -bi test.csv
text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)
这是第三方文件,我每天都会得到一个新文件,所以我宁愿不改变它.该文件具有非ascii字符,例如Ö.我需要使用python读取行,并且我可以忽略具有非ascii字符的行.
我的问题是,当我在Python中读取文件时,在到达存在非ascii字符的行时,我得到UnicodeDecodeError,而我无法读取文件的其余部分.
有没有办法避免这种情况.如果我试试这个:
fileHandle = codecs.open("test.csv", encoding='utf-8');
try:
for line in companiesFile:
print(line, end="");
except UnicodeDecodeError:
pass;
Run Code Online (Sandbox Code Playgroud)
然后当达到错误时,for循环结束,我无法读取文件的剩余部分.我想跳过导致错误的行并继续.如果可能的话,我宁愿不对输入文件进行任何更改.
有没有办法做到这一点?非常感谢你.
Mar*_*ers 49
您的文件似乎不使用UTF-8编码.打开文件时使用正确的编解码器很重要.
您可以open()使用errors关键字告诉如何处理解码错误:
errors是一个可选字符串,指定如何处理编码和解码错误 - 这不能在二进制模式下使用.可以使用各种标准错误处理程序,但已注册的任何错误处理名称
codecs.register_error()也是有效的.标准名称是:
'strict'ValueError如果存在编码错误,则引发异常.默认值None具有相同的效果.'ignore'忽略错误.请注意,忽略编码错误可能会导致数据丢失.'replace'导致在有错误数据的地方插入替换标记(例如"?").'surrogateescape'将表示任何不正确的字节作为Unicode专用区中的代码点,范围从U + DC80到U + DCFF.surrogateescape当在写入数据时使用错误处理程序时,这些私有代码点将被转回到相同的字节中.这对于处理未知编码的文件很有用.'xmlcharrefreplace'仅在写入文件时支持.编码不支持的字符将替换为相应的XML字符引用&#nnn;.'backslashreplace'(也只在写入时支持)用Python的反斜杠转义序列替换不支持的字符.
使用'strict'或打开文件'ignore'然后将允许您读取文件而不会引发异常.
| 归档时间: |
|
| 查看次数: |
29639 次 |
| 最近记录: |