【问题标题】:TypeError: "quotechar" must be an 1-character stringTypeError: "quotechar" 必须是 1 个字符的字符串
【发布时间】:2013-05-25 20:29:34
【问题描述】:

我正在尝试从 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 的真正作用。

【问题讨论】:

    标签: python csv python-2.7


    【解决方案1】:

    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 的值当然是没有意义的。

    【讨论】:

    • 我还是不太清楚quotechar和quoting的作用是什么。为什么要引用一些东西?如果您可以使用一些 csv 数据作为示例来解释这一点,那将是很棒的,这样我就可以理解需要。非常感谢您的回答!
    • 但是,QUOTE_NONE 在读取 CSV 文件时有什么意义吗?被引用的字段已经被引用。另外,你能详细说明一下quotechar吗?感谢您的耐心和努力:)
    • 我想我自己明白了。如果我错了,请纠正我。 quotechar 是将用于引用的字符。 quoting 控制将被引用的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2019-11-04
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多