0

到目前为止,我在函数中所能做的就是将所有数据存储两次。

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

4

1 回答 1

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()
于 2012-05-15T02:19:39.200 回答