埃文斯 十分感谢。这几乎是预期的结果。请亲自动手修改如下。 我们需要一点改变。请看一下图片。 在当前结果中,fileOne中的每个记录在fileTwo中搜索类似的adv_id和user_id,并在找到记录时将其取走并停止。但可能的是fileTwo中可能有几个类似的记录。所以,我们需要来自fileTwo的所有类似记录。并且fileOne的所有记录必须至少在fileTwo中可用一次或多次。因此,我们应该包括fileOne的所有记录以及来自fileTwo的所有类似记录。我认为逐行搜索可能会有所帮助。这是从fileOne的第一个的adv_id和user_id获取并搜索fileTwo中的所有记录以找到类似的记录。接下来使用fileOne的第二条记录并搜索fileTwo中的所有记录。等等。
答案 0 :(得分:0)
以下脚本将根据您的原始样本数据创建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
将包含以下数据:
在Python 3.4.3中测试
仅匹配adv_id
列并拥有所有条目:
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]].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] in d_entries:
csv_result.writerows(d_entries.pop(cols[0]))
csv_result.writerow(cols)