将新的字典值添加到现有的 csv

时间:2021-03-18 17:00:14

标签: python csv

我正在尝试向同一程序中的现有文件添加 2 个新列。 csv 是由前面的函数生成的。

在这里看了很多答案后,我尝试了这个,但它不起作用,因为我找不到任何使用 csv dict writer 的答案,它们都是关于 csv writer。这只会创建一个包含这两列的新文件。我可以得到一些帮助吗?

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 个答案:

答案 0 :(得分: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)