我喜欢用csv阅读器读取ASCII文件列表(utf-8)。 对于错误处理,我想检测用户是否偶然选择了无法读取的文件。 来源是这样的:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我是用户选择例如GZIPed的文件我收到了消息:
(结果,消耗)= self._buffer_decode(data,self.errors,final) UnicodeDecodeError:&#39; utf-8&#39;编解码器不能解码位置1中的字节0x8b:无效的起始字节
首先哪个好,但脚本崩溃了。 我没有发现如何捕获错误并强制脚本跳转到列表中的下一个文件。我发现了许多关于方言和其他编解码器的内容,但我的任务是不通过更改编解码器来读取错误的文件。
非常感谢任何评论!
答案 0 :(得分:1)
这个怎么样:
for File in Filenames:
print ('... processing file :',File)
with open(File, 'r') as csvfile:
try:
Reader = csv.reader(csvfile, delimiter = ';')
for Line in Reader:
print(Line)
except UnicodeDecodeError as e:
print("File {:} cannot be read. Skipping...".format(csvfile))
continue
答案 1 :(得分:0)
使用异常处理 - https://docs.python.org/3/tutorial/errors.html
您的代码将如下所示:
for File in Filenames:
print ('... processing file :',File)
try:
with open(File, 'r', encoding='utf-8') as csvfile:
Reader = csv.reader(csvfile, delimiter = ';')
for Line in Reader:
print(Line)
except UnicodeDecodeError:
pass
在打开文件时包含您期望的编码是一种很好的做法。如果将相同的脚本放在Windows框中,则默认编码不会是&#34; utf-8&#34;。