Python或bash:根据几个匹配的字段值,格式化,输出CSV合并两个csv文件

时间:2012-03-11 06:09:33

标签: python bash sorting join csv

由于我正在努力学习更多内容,因此我更倾向于使用Python。但是,如果你能提供仍然有用的bash帮助。

我看了看Stack Overflow并发现了一些有用的东西,但还不足以让我完成这个。

我有两个带有一些共享字段的CSV文件。数据不是INT。我希望基于匹配3个特定字段加入,并在完成所有处理后将其写入新的output.csv

sourceA.csv看起来像这样:

fieldname_1,fieldname_2,fieldname_3,fieldname_4,fieldname_5,fieldname_6,fieldname_7,fieldname_8,fieldname_9,fieldname_10,fieldname_11,fieldname_12,fieldname_13,fieldname_14,fieldname_15,fieldname_16

sourceB.csv看起来像这样:

fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16

如您所见,sourceB.csv有4个字段名称也在sourceA.csv中,而一个字段名称不在fieldname_OTHER中。 sourceA[fieldname_6]中的数据需要替换sourceA[fieldname_6]中的数据。

整个过程应该是这样的:

  • 如果满足以下所有条件,则将sourceB[fieldname_OTHER]中的数据替换为data in sourceA[fieldname_4]=sourceB[fieldname_4] data in sourceA[fieldname_8]=sourceB[fieldname_8] data in sourceA[fieldname_16]=sourceB[fieldname_16] 中的数据:

    sourceB[fieldname_5]

    sourceA[fieldname_6]中的数据无需评估。)

  • 如果不符合上述条件,只需将ANY替换为文字output.csv

  • 将每个已处理的行写入dataA,dataB,dataC,dataD,dataE,dataOTHER,dataG,dataH,dataI,dataJ,dataK,dataL,dataM,dataN,dataO,dataP

我希望输出基于输入CSV和上述处理的示例:

{{1}}

我希望我提供的细节并没有让它变得更加困惑。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我不确定我是否会厌倦SQL这样的一次性合并。它在python中很简单。

使用csv模块读入这两个文件,以获得两个列表。将sourceA索引到一个字典中,该字典的键是需要匹配的字段的元组。然后,您可以遍历sourceB,立即找到匹配的行,并从sourceB合并到其中。

完成后,您只需输出从sourceA读取的列表:dict和列表指向您现在已更新的相同值。