2 votes

Convertir une liste de dictionnaires en fichier csv

Je dispose d'une liste de dictionnaires de ce type :

[
{'site1':'data1'},
{'site2':'data2'}
]

Comment générer un fichier csv avec les données dans cet ordre ?

row 1      row2
site1      data1
site2      data2

2voto

Joe Iddon Points 13453

Bouclez les dictionnaires et écrivez-les dans le fichier.

list_of_dicts = [{'site1':'data1'},{'site2':'data2'}]
with open('sites.csv', 'w') as file:
    file.write('row1\trow2\n')
    for dictionary in list_of_dicts:
         file.write('\t'.join(list(dictionary.items())[0]) + '\n')

de la production :

row1    row2
site1   data1
site2   data2

Notez que chaque dictionnaire ne doit contenir qu'une seule entrée. S'il en contient plusieurs, l'une d'entre elles est sélectionnée au hasard et les autres sont ignorées. Il existe de nombreuses façons de gérer le fait qu'il y ait plus d'une entrée dans les dictionnaires. Vous devez donc ajouter le comportement attendu à l'énoncé de la question pour que ces cas soient pris en compte.

1voto

Alessandro Points 115

Ceci devrait faire l'affaire :)

data = [ {'site1':'data1'}, {'site2':'data2'} ]

with open ('list.csv', 'w') as f:
    for dict in data:
        for key, value in dict.items():
            text = key+','+value+'\n'
            f.writelines(text)

1voto

tdelaney Points 7235

Vous devez utiliser un programme d'écriture CSV pour vous assurer que tous les métacaractères intégrés, tels que les virgules et les guillemets, sont correctement échappés, faute de quoi des données telles que {'site3':'data, data and more data'} corrompra le fichier.

import csv

my_list = [{'site1':'data1'}, {'site2':'data2'}]

with open('test.csv', 'w', newline='') as out_fp:
    writer = csv.writer(out_fp)
    for d in my_list:
        writer.writerows(d.items())

Vous pouvez raccourcir un peu cette procédure en utilisant itertools si vous voulez

import itertools

with open('test.csv', 'w', newline='') as out_fp:
    csv.writer(out_fp).writerows(itertools.chain.from_iterable(
        d.items() for d in my_list))

1voto

user2552108 Points 308

J'aime utiliser pandas pour créer mes données et les écrire dans des fichiers csv.

a = [{'site1':'data1'},{'site2':'data2'}]
#Get each key and values from each dictionaries in the list
keys = []
vals = []
for a1 in a:
    for k, v in a1.items():
        keys.append(k)
        vals.append(v)
#make the dataframe from the keys and values
result = pd.DataFrame({'row1': keys, 'row2':vals})
#write the data into csv, use index=False to not write the row numbers
result.to_csv("mydata.csv", index=False)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X