Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python或bash:基于多个匹配字段值、格式、输出csv合并两个csv文件_Python_Bash_Sorting_Join_Csv - Fatal编程技术网

Python或bash:基于多个匹配字段值、格式、输出csv合并两个csv文件

Python或bash:基于多个匹配字段值、格式、输出csv合并两个csv文件,python,bash,sorting,join,csv,Python,Bash,Sorting,Join,Csv,我更喜欢用Python编写,因为我正在学习更多内容。但是,如果您能在bash中提供帮助,这仍然会很有帮助 我环顾了一下堆栈溢出,发现了一些有用的东西,但还不足以完成这项工作 我有两个CSV文件和一些共享字段。数据不是INT。我想根据匹配的3个特定字段加入,并在所有处理完成后将其写入新的output.csv sourceA.csv如下所示: fieldname_1,fieldname_2,fieldname_3,fieldname_4,fieldname_5,fieldname_6,fieldna

我更喜欢用Python编写,因为我正在学习更多内容。但是,如果您能在bash中提供帮助,这仍然会很有帮助

我环顾了一下堆栈溢出,发现了一些有用的东西,但还不足以完成这项工作

我有两个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
fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16
sourceB.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
fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16
正如您所看到的,
sourceB.csv
有4个字段名也在
sourceA.csv
中,而一个字段名不在其中。
fieldname\u OTHER
中的数据需要替换
sourceA[fieldname\u 6]
中的数据

整个过程应该是这样的:

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
fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16
  • 如果满足以下所有条件,则将
    sourceA[fieldname\u 6]
    中的数据替换为
    sourceB[fieldname\u 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

我希望我提供的细节没有让它变得更加混乱。谢谢你的帮助

对于这样的一次性合并,我不确定我是否会为SQL而烦恼。它在python中非常简单

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


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

我不确定是否会为这样的一次性合并而使用SQL。它在python中非常简单

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


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

将csv文件加载到MYSQL中的两个表中,然后进行连接。这种类型的操作就是关系数据库的全部内容。如果这是您必须经常做的事情,那么数据属于MySQL。什么是dataA、dataB等?如果sourceA行和sourceB行之间的这三个字段上有两个或更多匹配项,应该怎么做?sourceA和sourceB中各有多少行?使用MySQL join听起来确实是这项工作的最佳建议。请尽可能简化。我很确定不是所有的字段都与这个问题相关。将csv文件加载到MYSQL中的两个表中,然后进行连接。这种类型的操作就是关系数据库的全部内容。如果这是您必须经常做的事情,那么数据属于MySQL。什么是dataA、dataB等?如果sourceA行和sourceB行之间的这三个字段上有两个或更多匹配项,应该怎么做?sourceA和sourceB中各有多少行?使用MySQL join听起来确实是这项工作的最佳建议。请尽可能简化。我很确定不是所有的字段都与这个问题相关。