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

时间:2015-05-18 15:38:45

标签: python csv exception

我有一个名为writeLines(RMapsDemo, con = "RMapsDemo.R") 的字符串,我想用Python group_data阅读。这是我正在打电话。

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_ALL设置也是如此。我应该设置另一个选项让它失败吗?如果这是不可能的,有没有其他方法可以快速注意到是否有单引号或不带引号的字段?

1 个答案:

答案 0 :(得分:2)

对于它的价值,看起来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.