首页 > 解决方案 > 使用打印格式不适用于 csv 中的 DictWriter - python

问题描述

下面的例子似乎不起作用

import csv

values = [{'emp_name': 'John Wick',
        'dept': 'Accounting', 'val': '10'},
       {'emp_name': 'Neo Anderson',
        'dept': 'IT', 'val': '20'}]

with open('file1.csv', mode='w') as csv_file:
    fieldnames = ['name', 'department']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    for value in values:
        writer.writerow({"'name': '{emp_name}', 'department': '{dept}'".format(
            **value)
        })

错误:

Traceback (most recent call last):
  File "csv_test.py", line 13, in <module>
    **value)
  File "python-3.7.5/lib/python3.7/csv.py", line 155, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "python-3.7.5/lib/python3.7/csv.py", line 148, in _dict_to_list
    wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'set' object has no attribute 'keys'

预期输出:

name, department
John Wick, Accounting
Neo Anderson, IT

有没有好的解决方法?

标签: python-3.xcsv

解决方案


使用dict时通过writerow

前任:

import csv

values = [{'emp_name': 'John Wick',
        'dept': 'Accounting'},
       {'emp_name': 'Neo Anderson',
        'dept': 'IT'}]

with open('file1.csv', mode='w') as csv_file:
    fieldnames = ['emp_name', 'dept']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    for value in values:
        writer.writerow({"emp_name": value['emp_name'], "dept": value['dept']})   #Pass the dict



    

推荐阅读