到目前为止,我能够在函数中完成所有数据的两次存储。
import csv
def csvWriter(filename, records):
header = []
for i in records:
for v in i:
header.append(v)
test = open(filename,'w')
dict_wr = csv.DictWriter(test,header)
dict_wr.writerow(dict(zip(header,header)))
for i in records:
dict_wr.writerow(dict(zip(header,i.values())))
test.close()
return '%d records processed.' % len(records)
文件包含:
a,b,a,b
1,2,1,2
3,4,3,4
我相信我发现了问题,在for循环中,我无法创建正确的标头。
答案 0 :(得分:0)
看起来这个例子中的记录是2个具有相同键的字典('a'和'b')。您可以通过从第一个字典中获取标题来解决此问题:
for i in records[0]:
for v in i:
header.append(v)
但是,如果您的其他记录具有唯一键值,您可能希望将它们包含在标题中:
for i in records:
for v in i:
if v not in header: header.append(v)
最后,如果标题中有重复的值,并且DictWriter写了一行,它将重复每个重复标题值的条目。例如,
import csv
testfile = open("test.csv", "w")
header = ["a","b", "a","b"] #duplicate header fields
writer = csv.DictWriter(testfile, header)
writer.writerow(dict(zip(header, header)))
writer.writerow({header[0]:"A", header[1]:"B"}) #notice it writes 4 values to the row
testfile.close()