【问题标题】:Trouble with Python CSVPython CSV 的问题
【发布时间】:2016-12-02 18:58:34
【问题描述】:

我不确定为什么这不起作用:

reader = csv.reader("a,b,c", delimiter=",")
for r in reader:
    print r

输出:

['a']
['', '']
['b']
['', '']
['c']

我尝试过使用和不使用分隔符。理想情况下,我希望我的分隔符是;但我什至无法让这个简单的例子工作......

【问题讨论】:

  • 您应该将文件或类似文件的对象传递给csv.reader,而不是"a,b,c"
  • 这个例子不起作用是什么意思? csv.reader(csvfile, dialect='excel', **fmtparams)

标签: python python-2.7 csv


【解决方案1】:

您对csv.reader() 的使用并不典型。通常,传递一个类似file 的对象,而不是字符串。典型的用法是这样的:

with open('some_file.csv', 'rb') as input_file:
    reader = csv.reader(input_file)
    for r in reader:
        # do something with "r"
        pass

从技术上讲,传入的参数不必是file。它所要做的就是一个可迭代的字符串序列。因此,如果您传入一个列表而不是单个字符串,您的(相当奇怪的)示例可能会给出您期望的结果:

import csv
reader = csv.reader(["a,b,c"], delimiter=",")
for r in reader:
    print r

结果:

['a', 'b', 'c']

【讨论】:

    【解决方案2】:

    csv 阅读器需要一个类似对象的文件,因此将字符串 "a,b,c" 写入文件中,如 here 所述(第 13.1.1 章):

    >>> import csv
    >>> with open('eggs.csv', 'rb') as csvfile:
    ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    ...     for row in spamreader:
    ...         print ', '.join(row)
    Spam, Spam, Spam, Spam, Spam, Baked Beans
    Spam, Lovely Spam, Wonderful Spam
    

    或使用StringIO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2010-11-15
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多