如何在 Python 的 DictWrite 中添加“”到标题行项目

can*_*cse 5 python csv dictionary

我正在尝试编写一种将字典列表传递到 csv 文件的方法。

我有以下清单:

List = [{'a': 10, 'e': 14, 'b': 11, 'd': 13, 'c': 12}, {'a': 20, 'e': 24, 'b': 
21, 'd': 23, 'c': 22}, {'a': 30, 'e': 34, 'b': 31, 'd': 33, 'c': 32}, {'a': 
40, 'e': 44, 'b': 41, 'd': 43, 'c': 42}]
Run Code Online (Sandbox Code Playgroud)

以及以下代码:

def ListDic_to_CSV(filename, table, fieldnames, separator, quote):

    with open(filename, "w", newline="") as csvfile:
            csvwrite=csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter =separator, quotechar = quote)
            csvwrite.writeheader()
            for row in table:
                csvwrite.writerow(row)
Run Code Online (Sandbox Code Playgroud)

我试图得到:

"a","b","c","d","e"
10,11,12,13,14
20,21,22,23,24
30,31,32,33,34
40,41,42,43,44
Run Code Online (Sandbox Code Playgroud)

但我得到:

a,b,c,d,e
10,11,12,13,14
20,21,22,23,24
30,31,32,33,34
40,41,42,43,44
Run Code Online (Sandbox Code Playgroud)

如何更改我的代码,以便字段名称周围有“”?

use*_*754 3

quotation marks "您可以通过将作者的引用csv.QUOTE_ALL属性设置为并将quotechar设置为 来强制始终拥有"。然而,正如Daniel Roseman已经提到的,此属性存在的原因是引用包含分隔符的字段,例如,或您选择的任何一个。

这是一个设置quotechar和的小例子quoting

import csv

with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL, quotechar='"')
    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
Run Code Online (Sandbox Code Playgroud)

输出名称.csv:

"first_name","last_name"

"Baked","Beans"
Run Code Online (Sandbox Code Playgroud)

仅标题:

如果您有兴趣只用headersakafieldnames来编写,quotes您可以不用只是使用writer.writeheader()dowriter.writerow()并编写您自己的标头。基本上,writeheader无非是一个writerow用字典调用的方便函数。

import csv

with open('names3.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_NONE, quotechar=None)
    quotedFieldnames = [(name,'\"{0}\"'.format(name) ) for name in fieldnames]
    customHeader = dict(quotedFieldnames)
    writer.writerow(customHeader)
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
Run Code Online (Sandbox Code Playgroud)