Python:为标题行连接两个dictReader字符串

时间:2015-03-16 23:46:59

标签: python csv

我正在尝试在结果文件中创建标题行,该文件是第一个文件的标题行加上第二个文件的标题行。 例如: 旧文件标题行:( A列,B列......) 映射文件标题行:( C列,D列......) 并且我的结果文件应该包含:(列A,列B,列C,列D),每个列只用文本分隔。 我无法找到连接这两者的正确方法。如下所示,“+”无效。标题行将始终是文件中的第一行。任何建议将不胜感激。

import csv
with open('legacyFile.csv', 'r') as in_leg, open('MappingFile.csv', 'r') as in_map, open('results.csv', 'wb') as out_res:
    c1 = csv.DictReader(in_leg, delimiter=',', quoting=csv.QUOTE_NONE, fieldnames=[])
    c2 = csv.DictReader(in_map, delimiter=',', quoting=csv.QUOTE_NONE, fieldnames=[])


    #set headers and write header row to output file
    headerList1 = list(c1)
    headerList2 = list(c2)

    c1.fieldnames = (headerList1[0])
    c2.fieldnames = (headerList2[0])
    #fieldnames = c1.fieldnames + c2.fieldnames #--> can't concatenate these
    print c1.fieldnames    
    print c2.fieldnames

    c3 = csv.DictWriter(out_res, fieldnames=fieldnames)
    c3.writeheader()

    in_leg.close()
    in_map.close()
    out_res.close()

1 个答案:

答案 0 :(得分:0)

如果您查看c1.fieldnamesc2.fieldnames的结构,就会看到它们的格式和类型如下:

(Pdb) c1.fieldnames
{None: ['field1', 'field2', ..., 'fieldN']}
(Pdb) type(c1.fieldnames)
<type 'dict'>

所以我们可以通过创建一个新的字典对象来组合这两个字段对象,该对象具有None的键和第一组fieldnames +第二组的值。我们可以使用这一行:

fieldnames = {None: c1.fieldnames[None] + c2.fieldnames[None]}

实现这一目标。

然后,当您实际写出字典时,请务必使用以下行:

c3 = csv.DictWriter(out_res, fieldnames=fieldnames[None])

代替。我们需要从字典对象中提取名称列表。

让我知道这是否有效。