我正在尝试编写一个函数,以便它接收一组记录并以csv格式存储它们

时间:2012-05-15 01:30:35

标签: python csv

到目前为止,我能够在函数中完成所有数据的两次存储。

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循环中,我无法创建正确的标头。

1 个答案:

答案 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()