如何确认文件是有效的csv文件

时间:2015-06-25 07:38:03

标签: python csv exception-handling

我有一个读取csv文件的程序。有时用户会错误地尝试将Excel文件传递给程序,我想检测一下。

目前,我遇到了一个令人讨厌的错误,我似乎无法抓住它。

一个简单的例子:

from csv import DictReader
with open("an_excel_file_pretending_to_be_a_csv_file.csv", "rb") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

这会产生以下错误消息。

    for row in reader:
  File "c:\Python27\Lib\csv.py", line 107, in next
    self.fieldnames
  File "c:\Python27\Lib\csv.py", line 90, in fieldnames
    self._fieldnames = self.reader.next()
Error: line contains NULL byte

当DictReader尝试读取第一行数据时会发生这种情况。

我想做的是将此作为例外。不幸的是,这不是一个例外,它只是从我的代码中剔除错误信息。

from csv import DictReader
with open("an_excel_file_pretending_to_be_a_csv_file.csv", "rb") as f:
    reader = csv.DictReader(f)
    try:
        for row in reader:
            print(row)
    except Exception:
        print "error"

没有捕获任何内容,错误仍然在我的代码中出现,该代码处于处理许多文件的无限循环中。

这里有一个类似的问题:Python CSV error: line contains NULL byte

但我想在我的代码中优雅地捕获错误。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

你可以使用一般的try-except来捕获所有异常(小心,因为这可能很危险,隐藏代码中的错误)。

try:
    # your code that can raise exceptions here
except Exception as e:
    # handle ANY exception
else:
    # this executes if no exception occurred (optional)

答案 1 :(得分:0)

在使用csv.DictReader

之前,

readline函数可用于检测类型

with open("file1.csv", "rb") as f:
   print f.readline().split(",")
相关问题