Проверка уникальности записей в файл
Как сделать, чтобы в файл записывались только уникальные строки?
import csv
import os.path
FILENAME = 'example.csv'
data = [{'Lot number' : '4738273648100002', 'Pub date' : '25.02.2021'},
{'Lot number' : '4738273648100004', 'Pub date' : '26.02.2021'}]
def write_csv():
with open(FILENAME, 'a', newline='') as file:
names = ['Lot number', 'Pub date']
writer = csv.DictWriter(file, fieldnames=names, delimiter=';')
if os.path.getsize(FILENAME) == 0:
writer.writeheader()
writer.writerows(data)
write_csv()
проблема в том, что когда в переменную data потом приходят данные, например:
data = [{'Lot number' : '4738273648100001', 'Pub date' : '28.02.2021'},
{'Lot number' : '4738273648100004', 'Pub date' : '26.02.2021'}]
результат в файле такой:
{'Lot number': '4738273648100002', 'Pub date': '25.02.2021'}
{'Lot number': '4738273648100004', 'Pub date': '26.02.2021'}
{'Lot number': '4738273648100001', 'Pub date': '28.02.2021'}
{'Lot number': '4738273648100004', 'Pub date': '26.02.2021'}
а мне нужно без повторяющихся строк, т.е. такой результат:
{'Lot number': '4738273648100002', 'Pub date': '25.02.2021'}
{'Lot number': '4738273648100004', 'Pub date': '26.02.2021'}
{'Lot number': '4738273648100001', 'Pub date': '28.02.2021'}
Ответы (1 шт):
У вас два варианта.
В случае небольшого количества данных - держать их в ОП, при появлении нового элемента - проверять и по необходимости дополнять сам словарь, а в файл писать перед завершением работы всего скрипта.
Каждый раз при появлении новых данных, проверять, присутствуют-ли они в файле уже и дописывать файл, если нет. При большом объеме данных - операция будет не быстрая. Скрипт для ее выполнения выглядит примерно так.
exm={'Lot number': '4738273648100002', 'Pub date': '26.02.2021'}
with open('data_11.csv', 'r') as file:
itr = csv.DictReader(file)
for row in itr :
if dict(row)==exm:
break
else:
file.close
with open('data_11.csv', 'a', newline='') as file:
writer = csv.DictWriter(file,fieldnames=exm)
writer.writerow(exm)
Результат смотрим в файле