Настройка: CSV файлы вместо файлов Excel.
import io, csv
s = '''ID,Value
1,100
2,200
3,300
4,400'''
base = io.StringIO(s)
s = '''ID,Value
2,200
3,888
1,100
4,222'''
f2 = io.StringIO(s)
s = '''ID,Value
4,333
2,200
3,888
1,100'''
f3 = io.StringIO(s)
Прочитайте базовый файл и создайте словарь
d = {}
reader = csv.reader(base)
next(reader)
for k,v in reader:
d[k] = v
Прочитайтедругие файлы;если найдено совпадение , поместите Id
в набор
found = set()
for f in [f2,f3]:
reader = csv.reader(f)
next(reader)
for k,v in reader:
if d[k] == v:
found.add(k)
Используя Id
, которые НЕ были найдены, создайте новый файл, используя Value
из базового словаря.
missing = io.StringIO()
writer = csv.writer(missing)
writer.writerow(['Id','Value'])
for key in found.symmetric_difference(d):
writer.writerow([key,d[key]])
Это может быть лучше.Прочитайте базовый файл и поместите наборы (ID,value)
в набор.Прочитать другие файлы;если найдено совпадение , удалите этот кортеж из набора.Запишите все оставшиеся кортежи в наборе в новый файл.
reader = csv.reader(base)
next(reader)
base_values = set()
for ID,value in reader:
base_values.add((ID,value))
for f in [f2,f3]:
reader = csv.reader(f)
next(reader)
for row in reader:
thing = tuple(row)
if thing in base_values:
base_values.remove(thing)
missing2 = io.StringIO()
writer = csv.writer(missing2)
writer.writerow(['Id','Value'])
writer.writerows(base_values)