Python3写入字典到CSV时出现‘str’对象无‘keys’属性错误
问题解决:Python3中csv.DictWriter写入字典报错AttributeError
错误原因
你用csv.DictWriter.writerows(idDict)时犯了关键错误:writerows()方法要求传入由字典组成的可迭代对象,但直接传入字典idDict时,Python3会默认迭代字典的键(字符串类型)。每个字符串被当成要写入的元素时,DictWriter会尝试获取它的keys()方法,自然抛出AttributeError: 'str' object has no attribute 'keys'。
解决方案
根据需求,有两种可行的修复方式:
方式1:继续使用DictWriter,转换数据格式
把原字典转换成符合DictWriter要求的字典列表,每个元素对应CSV的一行,键对应表头headers:
# 创建字典 idDict = dict(zip(idList, pageTitles)) # 写入CSV,Python3中建议添加newline=''避免生成多余空行 with open('csvfile', 'w', newline='') as csvFile: writer = csv.DictWriter(csvFile, fieldnames=headers) writer.writeheader() # 将键值对转换为符合格式的字典列表 writer.writerows([{headers[0]: key, headers[1]: value} for key, value in idDict.items()])
方式2:改用csv.Writer,更简洁
如果不需要依赖DictWriter的特性,用普通的csv.Writer会更直接,因为你的数据本身就是键值对结构:
# 创建字典 idDict = dict(zip(idList, pageTitles)) with open('csvfile', 'w', newline='') as csvFile: writer = csv.writer(csvFile) writer.writerow(headers) # 写入表头 writer.writerows(idDict.items()) # 直接写入所有键值对行
补充说明
Python2中字典迭代行为和Python3一致,可能你之前的Python2代码是传入idDict.items()而非idDict,所以没出现错误。迁移到Python3时要注意这类细节差异。
内容的提问来源于stack exchange,提问作者DarkKnight4251
相关产品推荐
相关产品推荐

