【问题标题】:DictReader error: expected string or Unicode object, list foundDictReader 错误:预期的字符串或 Unicode 对象,找到列表
【发布时间】:2016-11-16 13:47:33
【问题描述】:

我正在尝试阅读具有以下权限的 google sheet 文档:

    opener = urllib2.build_opener()
    opener.addheaders = [('Accept-Charset', 'utf-8')]
    response = opener.open(
       "https://docs.google.com/spreadsheets/d/ID/export?format=csv"
    )
    csv_records = unicodecsv.reader(response, encoding='utf-8')
    translations = csv.DictReader(csv_records) 
    for row in translations:
       print row["age"]

但是,我收到一个错误:expected string or Unicode object, list found 可能是字段名。

怎么了?

堆栈跟踪

  File "/Users/me/projects/ad_copy.py", line 68, in create_copies
    for row in translations
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 107, in next
    self.fieldnames
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 90, in fieldnames
    self._fieldnames = self.reader.next()
TypeError: expected string or Unicode object, list found

打印

print translations
print csv_records
<csv.DictReader instance at 0x11163fa28>
<unicodecsv.py2.UnicodeReader object at 0x11160da50>

【问题讨论】:

  • 请发布堆栈跟踪
  • 您是否尝试过打印一些调试信息,例如翻译或数据?
  • 刚刚发布了堆栈跟踪
  • @rocksteady 添加了对象翻译和 csv_records 的打印

标签: python csv unicode


【解决方案1】:

据我了解,unicodecsv 返回一个列表,在您的情况下为csv_records

这取自github README

>>> import unicodecsv as csv
>>> from io import BytesIO
>>> f = BytesIO()
>>> w = csv.writer(f, encoding='utf-8')
>>> _ = w.writerow((u'é', u'ñ'))
>>> _ = f.seek(0)
>>> r = csv.reader(f, encoding='utf-8')
>>> next(r) == [u'é', u'ñ']
True

查看最后的比较。

您将这个返回的列表放入csv.DictReader(),这不是必需的,因为结果已经在csv_records 内。

打印出这个变量,看看里面是什么。

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2018-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多