J'ai une liste de dictionnaires qui ressemble à ceci:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Que dois-je faire pour convertir ceci en un fichier csv qui ressemble à ceci:
name,age,weight
bob,25,200
jim,31,180
python
csv
dictionary
data-conversion
backus
la source
la source
Réponses:
EDIT: Ma solution précédente ne gère pas la commande. Comme l'a noté Wilduck, DictWriter est plus approprié ici.
la source
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
place dedict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
pour obtenir toutes les clés de la liste (si vous en avez qui n'ont pas toutes les clés.)c'est lorsque vous avez une liste de dictionnaires:
la source
En python 3, les choses sont un peu différentes, mais beaucoup plus simples et moins sujettes aux erreurs. C'est une bonne idée de dire au CSV que votre fichier doit être ouvert avec un
utf8
encodage, car cela rend ces données plus portables pour les autres (en supposant que vous n'utilisez pas un encodage plus restrictif, commelatin1
)csv
python 3 a besoin dunewline=''
paramètre, sinon vous obtenez des lignes vierges dans votre CSV lors de l'ouverture dans excel / opencalc.Alternativement: je préfère utiliser le gestionnaire csv dans le
pandas
module. Je trouve qu'il est plus tolérant aux problèmes d'encodage, et les pandas convertiront automatiquement les numéros de chaîne dans les CSV dans le type correct (int, float, etc.) lors du chargement du fichier.Remarque:
utf8
en python3, et trouvera également les en-têtes.dataframe.to_dict('records')
csv
module vanilla , vous devez le nourrirOrderedDict
ou ils apparaîtront dans un ordre aléatoire (si vous travaillez en python <3.5). Voir: Préserver l'ordre des colonnes dans Python Pandas DataFrame pour plus.la source
Parce que @User et @BiXiC ont demandé de l'aide avec UTF-8, voici une variante de la solution par @Matthew. (Je n'ai pas le droit de commenter, alors je réponds.)
la source
Ce serait le moyen le plus simple d'écrire des données dans un fichier .csv
la source
Voici une autre solution plus générale en supposant que vous n'avez pas de liste de lignes (peut-être qu'elles ne tiennent pas en mémoire) ou une copie des en-têtes (peut-être que la
write_csv
fonction est générique):Remarque : le constructeur OrderedDict utilisé ici ne préserve que l'ordre en python> 3.4. Si l'ordre est important, utilisez le
OrderedDict([('name', 'bob'),('age',25)])
formulaire.la source
la source