如何根据两个CSV文件中的公共信息用Python合并两个CSV文件?

2024-04-25 17:42:41 发布

您现在位置:Python中文网/ 问答频道 /正文

埃文斯, 太好了,谢谢。这几乎是预期的结果。请您帮忙修改如下。 我们需要一点零钱。请看一下图片。 在目前的结果中,fileOne中的每个记录都会在fileTwo中搜索相似的adv_id和user_id,当找到一条记录时,将其取下并停止。但有可能在fileTwo中有几个类似的记录。所以,我们需要文件2中所有类似的记录。并且fileOne的所有记录必须在fileTwo中至少有一次或多次可用。所以,我们应该包括fileOne的所有记录以及它们来自fileTwo的所有类似记录。我认为逐行搜索可能会有帮助。即取fileOne中第一个的adv_id和user_id,然后搜索file2中的所有记录以找到类似的记录。下一步使用fileOne的第二条记录并搜索fileTwo中的所有记录。等等。在

Revised Image For Expected Result


Tags: 文件imageidfor记录图片resultfile2
1条回答
网友
1楼 · 发布于 2024-04-25 17:42:41

下面的脚本将基于您的原始示例数据创建result.csv(请参阅问题的过去编辑):

import csv
from collections import defaultdict

d_entries = defaultdict(list)

with open('fileTwo.csv', 'r') as f_fileTwo:
    csv_fileTwo = csv.reader(f_fileTwo)
    header_fileTwo = next(csv_fileTwo)
    for cols in csv_fileTwo:
        d_entries[(cols[0], cols[1])].append([cols[0], ''] + cols[1:])

with open('fileOne.csv', 'r') as f_fileOne, open('result.csv', 'w', newline='') as f_result:
    csv_fileOne = csv.reader(f_fileOne)
    csv_result = csv.writer(f_result)
    header_fileOne = next(csv_fileOne)
    csv_result.writerow(header_fileOne)

    for cols in csv_fileOne:
        if (cols[0], cols[2]) in d_entries:
            csv_result.writerow(cols)
            csv_result.writerows(d_entries.pop((cols[0], cols[2])))

当在Excel中打开时,result.csv将包含以下数据:

enter image description here

在python3.4.3中测试

要仅匹配adv_id列并拥有所有条目:

^{pr2}$

相关问题 更多 >