Python CSV 阅读器应在输入错误时引发错误

标签 python csv exception

我有一个名为 group_data 的字符串,我想用 Python 的 csv.reader 读取它。这是我的电话。

group = csv.reader(group_data.split('\n'), delimiter=';', 
                   doublequote=True, quoting=csv.QUOTE_ALL, strict=True)

我希望只要出现以下情况之一,就会引发异常:

  • 有一个单引号:"A";"B "bb"B";"C" "A";"B""bb""B";"C")
  • 任何字段都不是 引用:A;B;C 而不是 "A";"B";"C"

但是,上面的摘录接受两行都是正确的,即使使用了 doublequote=Truequoting=csv.QUOTE_ALLstrict=True设置。我应该设置另一个选项使其失败吗?如果这不可能,是否有另一种方法可以快速注意到是否存在单引号或未引号字段?

最佳答案

就其值(value)而言,Python 3.4 似乎确实拒绝了您的第一个示例:

In [8]: mkreader = lambda x: csv.reader(x.split("\n"), delimiter=";", doublequote=True, quoting=csv.QUOTE_ALL, strict=True)
In [11]: for l in mkreader('''"A";"B ""bb"" B";"C"'''): print(l)
['A', 'B "bb" B', 'C']
In [12]: for l in mkreader('''"A";"B "bb" B";"C"'''): print(l)
...
Error: ';' expected after '"'

虽然它允许第二个:

In [13]: for l in mkreader('''A;B;C'''): print(l)
['A', 'B', 'C']

查看 docs ,这似乎是因为 QUOTE_ALL 严格来说是作者设置,而不是读者设置:

csv.QUOTE_ALL
    Instructs writer objects to quote all fields.

比较:

csv.QUOTE_NONNUMERIC

    Instructs writer objects to quote all non-numeric fields.

    Instructs the reader to convert all non-quoted fields to type float.

所以看起来如果你想要的话,你需要自己做。如果您知道 ; 永远不会出现在您的行内(这似乎是这种情况,因为您没有设置 escapechar),这很简单:

In [19]: def check_line(line):
    for word in line.split(';'):
        if word[0] != '"' or word[-1] != '"':
            raise csv.Error("Bad input.")
In [20]: check_line("A;B;C")
...
Error: Bad input.

关于Python CSV 阅读器应在输入错误时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307434/

相关文章:

php - 上传csv并导入mysql数据库

RUBY CSV 计算返回

python - 如何使用 Python 的 UnRAR 库记录错误的密码?

c# - 仅在一台电脑上出现异常,在其他电脑上工作正常

java.util.InputMismatchException : For input string: "2147483648"

python - Ipython 笔记本缓存问题

python - pandas 计算中的最小值

python - 缺少 DBus .service 文件

python - 使用子图时 Matplotlib 不会显示小刻度

python - iOS 6 : libpython2. 7.a初始化导入错误