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

Shu*_*yal 4 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ker 11

QUOTE_NONE是指参数的值quoting,而不是quotechar.

正确的方法是使用

taxiDataReader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)

该文档的状态quotechar必须始终是一个字符的字符串,其作用是简单地选择应该用于引用的字符.

例如,在各种情况下引用变得必要

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

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

1,hello,1,2,3,hi
there
Run Code Online (Sandbox Code Playgroud)

不是吗?因此,引用这些字段:

1,hello,"1,2,3","hi\nthere"
Run Code Online (Sandbox Code Playgroud)

quoting控制什么时候会引用(默认为QUOTE_MINIMAL,即只有在绝对需要引号时).如果你完全关闭引用(QUOTE_NONE),那么它的值quotechar当然是没有意义的.