Как экспортировать несколько словарей с разными ключами в один CSV-файл на Python? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь записать несколько словарей с разными именами полей в один CSV-файл.Я хотел бы иметь ключи всех словарей в верхней части файла CSV в качестве заголовка и все их значения в каждой строке.Но мой код этого не делает, и он добавляет ключи каждого словаря в отдельную строку, а его значения в строке ниже.

from bs4 import BeautifulSoup
import os
import re
import csv

for j in range(1,39):
    for i in rabge(1,10):


### calculate super_dict for each html pages
            super_dict.update(social_urls)
            super_dict.update(metadata)
            super_dict.update(project_name)
            super_dict.update(bc_dict)
            super_dict.update(ind_dict)
            super_dict.update(pos_dict)
            super_dict.update(likes_dict)
            super_dict.update(memprof_dict)
            super_dict.update(video_link)
            super_dict.update(details_dict) 
            with open('output.csv', 'a') as csvfile:`
                fieldnames = super_dict.keys()
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
                writer.writeheader()
                writer.writerow(super_dict)

1 Ответ

1 голос
/ 18 июня 2019

Проблема в том, что код записывает один словарь, который DictWriter обрабатывает как одну строку. Подход, который должен работать, состоит в том, чтобы создавать имена полей из всех ключей dict, а затем записывать каждый dict в виде отдельной строки.

Примерно так:

dicts = [social_urls, metadata, ...]
fieldnames = set()
# Update fieldnames with each dict's keys
# Use a set to filter duplicates.
fieldnames.update(*(d.keys() for d in dicts))
with open(myfile.csv, 'a', newline='') as f:
    writer= csv.DictWriter(f, fieldnames=fieldnames)
    for d in dicts:
        writer.writerow(d)
...