我正在尝试阅读具有如下权限的 google 表格文档:
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
probably for the fieldnames.
怎么了?
堆栈跟踪:
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>
请您参考如下方法:
据我了解,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
中。
打印出这个变量,看看里面有什么。