使用csv reader检测错误的文件格式

时间:2016-08-17 11:56:22

标签: python csv

我喜欢用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:无效的起始字节

首先哪个好,但脚本崩溃了。 我没有发现如何捕获错误并强制脚本跳转到列表中的下一个文件。我发现了许多关于方言和其他编解码器的内容,但我的任务是不通过更改编解码器来读取错误的文件。

非常感谢任何评论!

2 个答案:

答案 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;。