我有一个包含datetime.datetime
对象作为键的字典,我想将它们写到一个csv文件中。但是,将引发以下错误:
Traceback (most recent call last):
File "/Users/macbook/Documents/08_PYTHON/00_PROJECTS/Navps/code/scrape.py", line 179, in <module>
writer.writerow(data)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/csv.py", line 154, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/csv.py", line 147, in _dict_to_list
wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'datetime.datetime' object has no attribute 'keys'
这是我的代码如下:
csv_columns = ['Date','Fund Value']
try:
with open(bof, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for data in csvdict:
writer.writerow(data)
except IOError:
print("I/O error")
这是csvdict
的样子:
csvdict = {datetime.datetime(2019, 1, 16, 0, 0): '2.8010', datetime.datetime(2019, 2, 8, 0, 0): '2.8295', datetime.datetime(2019, 2, 7, 0, 0): '2.8326',....}
处理datetime.datetime
对象作为键时,我缺少什么吗?我真的很想把日期当作我的钥匙。这根本不可能吗?
注意:如果有帮助,请在Python 3.8上运行此脚本
问题来源:stackoverflow
问题是csv.DictWriter希望每一行都是一个字典。因此,要使用它,您需要将每个键,csvdict
中的值项转换为一行。内置的zip()函数很容易:
import csv
import datetime
bof = 'bof.csv'
csvdict = {datetime.datetime(2019, 1, 16, 0, 0): '2.8010',
datetime.datetime(2019, 2, 8, 0, 0): '2.8295',
datetime.datetime(2019, 2, 7, 0, 0): '2.8326',}
csv_columns = ['Date','Fund Value']
try:
with open(bof, 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for row in (dict(zip(csv_columns, item)) for item in csvdict.items()):
writer.writerow(row)
except IOError:
print("I/O error")
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。