【问题标题】:How to confirm a file is a valid csv file如何确认文件是有效的 csv 文件
【发布时间】:2015-06-25 07:38:03
【问题描述】:

我有一个读取 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

但我想在我的代码中优雅地捕捉到错误。我该怎么做?

【问题讨论】:

标签: python csv exception-handling


【解决方案1】:

您可以使用一般的 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)

【讨论】:

  • 你不应该捕获所有异常。
  • @ssundarraj 我知道这一点,我已经在我的回答中添加了一个警告,并且代码中的注释明确表示ANY exception
【解决方案2】:

使用csv.DictReader之前可以使用readline函数检测类型

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多