我正在尝试在结果文件中创建标题行,该文件是第一个文件的标题行加上第二个文件的标题行。 例如: 旧文件标题行:( 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()
答案 0 :(得分:0)
如果您查看c1.fieldnames
和c2.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])
代替。我们需要从字典对象中提取名称列表。
让我知道这是否有效。