以下脚本将根据您的原始示例数据创建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])))
result.csv 在 Excel 中打开时将包含以下数据:
在 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)