#python #csv
Вопрос:
Я пытаюсь добавить 2 новых столбца в существующий файл в той же программе. Файл csv генерируется предыдущей функцией.
Просмотрев здесь много ответов, я попробовал это, но это не сработало, потому что я не смог найти никаких ответов, используя csv dict writer
в них, они были все csv writer
. Это просто создает новый файл с этими 2 столбцами в них. Могу ли я получить некоторую помощь в этом?
for me, sp in zip(meds, specs):
print(me.text, sp.text)
dict2 = {"Medicines": me.text, "Specialities": sp.text}
with open(f'Infusion_t{zip_add}.csv', 'r') as read,
open(f'(Infusion_final{zip_add}.csv', 'a ', encoding='utf-8-sig', newline='') as f:
reader = csv.reader(read)
w = csv.DictWriter(f, dict2.keys())
for row in reader:
if not header_added:
w.writeheader()
header_added = True
row.append(w.writerow(dict2))
Комментарии:
1. Ваши вложенные циклы будут создавать перекрестный продукт между списками и файлом CSV, это то, что вы хотите? Или они должны быть в переписке 1 к 1?
2. для 1 значения в строке в предыдущем файле они должны добавить несколько строк для одного и того же индекса, но в 2 разных столбцах. Я не дошел до этой части, потому что на данный момент она даже не написана. Как и в предыдущем файле, есть имя певца … это его песни и альбомы … что-то в этом роде.
Ответ №1:
Вам нужно добавить новые столбцы row
, а затем записать row
их в выходной файл. Вам не нужен словарь или DictWriter
.
Вы также можете открыть выходной файл только один раз перед циклом и записать туда заголовок, а не каждый раз через основной цикл.
with open(f'(Infusion_final{zip_add}.csv', 'w', encoding='utf-8-sig', newline='') as f:
w = csv.writer(f)
w.writerow(['col1', 'col2', 'col3', ..., 'Medicines', 'Specalities']) # replace colX with the names of the original columns
for me, sp in zip(meds, specs):
print(me.text, sp.text)
with open(f'Infusion_t{zip_add}.csv', 'r') as read:
reader = csv.reader(read)
for row in reader:
row.append(me.text)
row.append(sp.text)
w.writerow(row)
Комментарии:
1. Вы были правы, он повторяет заголовки. Я должен открыть его только один раз. Огромное спасибо, я пробовал это уже целый час.
2. Ваша
header_added
переменная должна предотвращать повторение заголовков. Но этот способ проще.