При записи в CSV файл дублируются заголовки
Столкнулся с такой проблемой, пытаюсь записать значения в файл CSV, но с каждой итерацией помимо данных записываются и заголовок
файл откуда я беру данные:
{'CardNumber': '4908479223533705', 'ContractType': 'No', 'NameSurname': 'MELIS RAY', 'PersonalCode': '290491-14236'}
{'CardNumber': '4208450200514387', 'ContractType': 'Yes', 'NameSurname': 'CORTEX AUTOLT', 'PersonalCode': '39104299168'}
{'CardNumber': '4208450200514395', 'ContractType': 'Yes', 'NameSurname': 'CORTEX AUTOLT', 'PersonalCode': '39104299168'}
import csv
import ast
def contract_lv(ddict):
with open("contract_lv.csv", "a+", newline='') as f:
writer = csv.writer(f, delimiter=";")
writer.writerow(["CardNumber","ContractType","NameSurname","PersonalCode"])
for k,v in ddict.items():
print(v, file=f, end=';')
with open("csv_file.txt", encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
ddict = ast.literal_eval(line)
if ddict["ContractType"] == "Yes":
# print(ddict['CardNumber'])
contract_lv(ddict)
на выходе в файле csv получаю следующее:
CardNumber;ContractType;NameSurname;PersonalCode
4208450200514387;Yes;CORTEX AUTOLT;39104299168;CardNumber;ContractType;NameSurname;PersonalCode
4208450200514395;Yes;CORTEX AUTOLT;39104299168;
почему после первой строки в файле csv выводится заголовок?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Навскидку:
import csv
import ast
def contract_lv(ddict, write_header):
with open("contract_lv.csv", "a+", newline='') as f:
writer = csv.writer(f, delimiter=";")
if write_header:
writer.writerow([
"CardNumber",
"ContractType",
"NameSurname",
"PersonalCode"
])
for k,v in ddict.items():
print(v, file=f, end=';')
print(file=f)
with open("csv_file.txt", encoding='utf-8') as file:
lines = file.readlines()
write_header = True
for line in lines:
ddict = ast.literal_eval(line)
if ddict["ContractType"] == "Yes":
# print(ddict['CardNumber'])
contract_lv(ddict, write_header)
write_header = False
Я добавил переменную write_header, которая будет сообщать функции contract_lv, что нужно вывести заголовок, и функция будет это делать только при первом обращении. Кроме того, после вывода всей строки с данными, нужно не забывать переводить строку, для этого добавлен print().