Skip to main content
 首页 » 编程设计

python之发现 DictReader 错误 : expected string or Unicode object, 列表

2025年02月15日11xing901022

我正在尝试阅读具有如下权限的 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 中。

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