我有一个包含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