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

假设我有一个csv.DictReader对象,我想把它写成一个csv文件。我该怎么做

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

dr=csv.DictReader(打开(f),分隔符='\t')
#处理我的dr对象
# ...
#写出对象
输出=csv.DictWriter(打开(f2,'w'),分隔符='\t')
对于dr中的项目:
output.writerow(项目)

但是我怎样才能包括字段名呢

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

从集合导入订单
ordered_FieldName=OrderedDict([('field1',None),('field2',None)])
以open(输出文件,'wb')作为fou:
dw=csv.DictWriter(fou,分隔符='\t',字段名=有序的\u字段名)
dw.writeheader()
#继续写入数据

实例化DictWriter需要fieldnames参数。
从文件中:

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

换句话说:Fieldnames参数是必需的,因为Python dict本身就是无序的。
下面是如何将标题和数据写入文件的示例。
注:with语句添加在2.6中。如果使用2.5:from\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu语句导入

以开放式(填充,'rb')作为鳍:
dr=csv.DictReader(fin,分隔符='\t')
#dr.fieldnames包含来自“f”第一行的值。
以open(输出文件,'wb')作为fou:
dw=csv.DictWriter(fou,分隔符='\t',fieldnames=dr.fieldnames)
标题={}
对于dw.fieldnames中的n:
标题[n]=n
dw.writerow(标题)
对于dr中的行:
dw.writerow(行)

正如@FM在评论中提到的,您可以将标题文字压缩为一行,例如:

打开(输出文件,'wb')作为fou:
dw=csv.DictWriter(fou,分隔符='\t',fieldnames=dr.fieldnames)
dw.writerow(dict((fn,fn)表示dr.fieldnames中的fn))
对于dr中的行:
dw.writerow(行)

发表评论