Как в файл добавить уникальные значения?
Имеется файл в котором такой список строк:

Порядок столбцов такой: артикул,имя,бренд,кол-во,цена
Нужно считать кол-во одинаковых строк, то есть чтобы совпдали артикул, бренд и цена. Считаем кол-во таких одинаковых строк и записываем в файл. Должно получится так:
109120466 Кольцо уплотнительное (18x6x4) TOPRAN 8 8.50
То есть из восьми одинаковых строк остается одна и кол-во этих строк пишется в столбик для кол-во
Я сделал так:
wbf = Workbook()
ws = wbf.active
list_items = get_list_data(file_input)
articul = ''
for i,item in enumerate(list_items):
count_item = 0
window['out'].Update(value=f'{i}/{len(list_items)}')
for j,item_j in enumerate(list_items):
if item['idnp'] == item_j['idnp'] and item['brand'] == item_j['brand'] and item['price'] == item_j['price']:
count_item += 1
if count_item != 0:
if articul != item['idnp']:
ws.append([item['idnp'],item['title'],item['brand'],count_item,item['price']])
articul = item['idnp']
В list_items приходит список строк из файла. Далее циклы, в которых проходят проверки. Проверяется каждый элемент списка с тем же элементом списка, так я считаю одинаковые строки.
Далее я взял переменную articul, пока что она пустая, и сверяю ее с текущим элементов списка. Это делаю для того чтобы не было дублей в файле. Но как я понял это плохой подход, потому что если изменить цену у такого же артикула(типа id товара) то она в файл не добавится. И это нужно исправить.
Как это сделать? Может есть вообще другой подход, чтоб провернуть такое?
Но если изменить цену у какой-то из строк, то она не добавится в файл.
Ответы (1 шт):
я бы сначала посчитал все повторения строк и потом уже заносил итоговую информацию. Конечно, если строк слишком много и в памяти держать общее количество не желательно, нужен будет другой подход
wbf = Workbook()
ws = wbf.active
list_items = get_list_data(file_input)
result_list = []
for i,item in enumerate(list_items):
window['out'].Update(value=f'{i}/{len(list_items)}')
is_duplicate = False
for item_check in result_list:
if item['idnp'] == item_check['idnp'] and item['brand'] == item_check['brand'] and item['price'] == item_check['price']:
is_duplicate = True
item["duplicates_count"] = item["duplicates_count"] + 1
break;
if not is_duplicate:
result_list.append(item)
result_list[-1]["duplicates_count"] = 1
for item in result_list:
ws.append([item['idnp'], item['title'], item['brand'], item["duplicates_count"], item['price']])