【发布时间】:2012-03-28 00:20:55
【问题描述】:
我更喜欢在 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。
我希望输出基于上述输入 CSV 和处理的示例:
dataA,dataB,dataC,dataD,dataE,dataOTHER,dataG,dataH,dataI,dataJ,dataK,dataL,dataM,dataN,dataO,dataP
我希望我所提供的详细信息没有造成不必要的混乱。感谢您的所有帮助!
【问题讨论】:
-
将 csv 文件加载到 MYSQL 中的两个表中,然后进行连接。这种类型的操作就是关系数据库的全部内容。如果这是您必须经常做的事情,那么数据属于 MySQL。
-
什么是dataA、dataB等?如果在 sourceA 行和 sourceB 行之间的这三个字段上有两个或多个匹配项,应该怎么办? sourceA 和 sourceB 各有多少行?
-
使用 MySQL 连接听起来确实是这项工作的最佳建议。
-
请尽量简化。我很确定并非所有字段都与此问题相关。
标签: python bash sorting join csv