TypeError:“quotechar”必须是1个字符的字符串

时间:2013-05-30 10:01:34

标签: python csv python-2.7

我正在尝试从csv文件中读取数据。我将quotechar设置为csv.QUOTE_NONE。

我为此目的编写的四行Python如下 -

import csv
with open('mtz.gps.comfort_gps_logs_20110214_20110215.csv', 'rb') as csvfile:
    taxiDataReader = csv.reader(csvfile, delimiter = ',', quotechar = csv.QUOTE_NONE)
    for row in taxiDataReader:
        print row

但是,当我运行这些时,我收到此错误消息 -

Traceback (most recent call last):
  File "log.py", line 3, in <module>
    taxiDataReader = csv.reader(csvfile, delimiter = ',', quotechar = csv.QUOTE_NONE)
TypeError: "quotechar" must be an 1-character string

我不仅想了解为什么会出现这个特殊错误,而且还会更详细地了解quotechar的作用是什么。

1 个答案:

答案 0 :(得分:11)

QUOTE_NONE表示参数quoting的值,而不是quotechar的值。

正确的方法是使用

taxiDataReader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)

The docs state quotechar必须始终是一个字符的字符串,其作用只是选择应该使用哪个字符进行引用。

在各种情况下都需要引用,例如

  • 如果CSV字段包含分隔符(例如逗号)
  • 如果CSV字段包含换行符。

在这两种情况下,CSV阅读器都需要知道这些字符是文字​​字符,而不是控制字符。因此,如果您想将值[1, "hello", "1,2,3", "hi\nthere"]放入CSV文件中,那么如果结果是

则会非常糟糕
1,hello,1,2,3,hi
there
不会吗?因此,引用这些字段:

1,hello,"1,2,3","hi\nthere"

quoting控制在(默认为QUOTE_MINIMAL时引用的内容,即仅在绝对需要引号时)。如果您完全关闭引号(QUOTE_NONE),则quotechar的值当然毫无意义。