如何在python中使用Dict Writer创建正确的CSV?

时间:2018-04-14 08:52:13

标签: python python-2.7 csv dictionary

我想将不同的列及其值写入单个CSV文件中, 但它压倒了以前的路线。我的代码是,

import csv
onlyKeys=['date']
def samp(date,field):
    onlyKeys.append(field)
    myFile = open('fulltest.csv', 'wb') 
    with myFile: 
        writer1 = csv.DictWriter(myFile, fieldnames=onlyKeys)    
        writer1.writeheader()     

        writer1.writerow({'date' : date, field: 1})  
        print('row written') 
    myFile.close()
samp('jan 10 2018 23:34:55','Video Error1')     
samp('jan 10 2018 23:34:56','Video Error2')   
samp('jan 10 2018 23:34:57','Video Error3')

我的预期输出是

date,Video Error1,Video Error2,Video Error3
jan 10 2018 23:34:55,1,0,0
jan 10 2018 23:34:56,0,1,0
jan 10 2018 23:34:57,0,0,1

但我得到的是,

date,Video Error1,Video Error2,Video Error3
jan 10 2018 23:34:57,,,1

如何在单独的行上写每一行。感谢

1 个答案:

答案 0 :(得分:0)

以模式'wb'打开文件,首先销毁文件中的所有数据。您想要的是追加新数据到现有数据,因此您应该以{{1​​}}模式打开文件。顺便说一下,我不认为DictReader / DictWriter需要二进制文件。所以你可以简单地使用模式'ab'

为避免多个标题行,'a'命令也应移到writeheader()函数之外。但这意味着在开始调用函数samp

之前,您知道所有字段的总数和名称

最后评论:当您在CSV文件中写入一行时,只输出两个字段:samp和当前date。因此,您不能在未使用的字段中获得0(如您预期的输出中所示),而是空字段。但是我猜这对于你的其余处理来说应该是一个问题