当前位置: 首页 > 面试题库 >

如何使用csv.DictWriter写标题行?

陶炫明
2023-03-14
问题内容

假设我有一个csv.DictReader对象,并且想将其写为CSV文件。我怎样才能做到这一点?

我知道我可以这样写 数据行

dr = csv.DictReader(open(f), delimiter='\t')
# process my dr object
# ...
# write out object
output = csv.DictWriter(open(f2, 'w'), delimiter='\t')
for item in dr:
    output.writerow(item)

但是,如何包含字段名?


问题答案:

编辑:
在2.7 /
3.2中,有一个新writeheader()方法。同样,John
Machin的答案提供了一种更简单的写标题行的方法。现在使用2.7 / 3.2中提供
writeheader()方法的简单示例:


from collections import OrderedDict
ordered_fieldnames = OrderedDict([('field1',None),('field2',None)])
with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=ordered_fieldnames)
    dw.writeheader()
    # continue on to write data

实例化DictWriter需要一个fieldnames参数。
从文档中:

fieldnames参数标识传递给writerow()方法的字典中的值写入csvfile的顺序。

换句话说,Fieldnames参数是必需的,因为Python字典本质上是无序的。
以下是如何将标头和数据写入文件的示例。
注意:with声明是在2.6中添加的。如果使用2.5:from __future__ import with_statement

with open(infile,'rb') as fin:
    dr = csv.DictReader(fin, delimiter='\t')

# dr.fieldnames contains values from first row of `f`.
with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
    headers = {} 
    for n in dw.fieldnames:
        headers[n] = n
    dw.writerow(headers)
    for row in dr:
        dw.writerow(row)

正如@FM在评论中提到的,您可以将标头编写压缩为单行代码,例如:

with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
    dw.writerow(dict((fn,fn) for fn in dr.fieldnames))
    for row in dr:
        dw.writerow(row)


 类似资料:
  • 问题内容: 我想使我的pandas数据框中的所有列标题都小写 例 如果我有: 我想通过执行以下操作将XRAT更改为xrat: 这样我得到: 我不会提前知道每个列标题的名称。 问题答案: 您可以这样做: 要么 例:

  • 问题内容: 我想从文件中推断出字段名称。文档说: “如果省略fieldnames参数,则csvfile第一行中的值将用作字段名。” ,但在我的情况下,第一行包含标题,第二行包含名称。 我无法按照Python 3.2的要求在csv.DictReader中跳过一行, 因为在初始化读取器时发生了字段名分配(否则我做错了)。 csvfile(从Excel 2010导出,原始源): 我的代码: 当前结果:

  • 问题内容: 我目前正在编写一个使用BufferedWriter生成多个日志文件的应用程序。但是,在调试时,我想写入System.out而不是文件。我认为我可以从以下方面进行更改: 至: 相对于: 但是,新选项无法正常工作。我如何只更改BufferedWriter构造函数内部的对象,以从文件重定向到标准输出。由于我将要写入多个日志文件,因此实际上无法使用System.out并将输出更改为文件。 问题

  • 我是新来的Spring。我的一个项目需要调用一个自动任务应用编程接口,它在标题中包含应用编程接口集成代码、用户名和密码。如何将其集成到Rest模板中? 下面是我在swagger上测试的API的截图。使用Swagger调用API的截图

  • 本文向大家介绍如何写出点击率高的标题?相关面试题,主要包含被问及如何写出点击率高的标题?时的应答技巧和注意事项,需要的朋友参考一下 点击率高的标题能够引发用户情绪,令人愉悦、好奇、震撼、激动、疑问、有趣等等。 设置反差,制造悬念(从菜鸟到百万年薪创意总监,是因为他8年坚持了一件事) 句式多样化(反问、疑问、感叹-支付宝,你的广告为什么这么丑?) 借用知名的人和事,提供焦点(周杰伦为他写歌,周星驰拿

  • 问题内容: 望回到发展空间;主要使用Java调用某些本地win32函数(我不希望在.NET中构建)…。 有人可以指向我一个可以使用Java(JNI / JNA / SWIG)从不同的运行窗口中读取标题的地方。假设您知道要尝试挂接到的应用程序在内存空间中的哪个位置。 问题答案: JNA中: 要使用它: 您可能需要为HWND使用适当的结构映射,并允许unicode支持。您可以在JNA网站上找到该信息以