【问题标题】:How do I add "" to header row items in DictWrite at Python如何在 Python 的 DictWrite 中将“”添加到标题行项目
【发布时间】:2018-06-11 17:59:21
【问题描述】:

我正在尝试编写一种将字典列表传递给 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}]

还有如下代码:

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)

我想得到:

"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

但我明白了:

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

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

【问题讨论】:

  • 为什么需要引号?通常在 CSV 中,只有在字符串包含分隔符(即逗号)时才使用引号。
  • 这是我正在处理的一项任务,其解决方案是带有引号字段的解决方案。就是这样。

标签: python csv dictionary


【解决方案1】:

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

这是一个设置quotecharquoting 的小例子:

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'})

输出名称.csv:

"first_name","last_name"

"Baked","Beans"

仅标题:

如果您有兴趣将headers 又名fieldnamesquotes 一起编写,您可以不使用writer.writeheader() 而只是使用writer.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'})

【讨论】:

  • 此解决方案引用包括数据项在内的所有内容。有没有办法只引用字段名行项目?
  • 啊,我明白了,添加\"fieldname\" 不是一个选项吗?您可以覆盖DictWriterwriteHeader 方法,然后您可以定义字段名称的构造方式。
  • 刚刚添加了一个传递引用字段的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2012-11-07
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多