Comment puis-je convertir cette liste de dictionnaires pour un fichier csv?
J'ai une liste de dictionnaires qui ressemble à quelque chose comme ceci:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Que dois-je faire afin de le convertir en un fichier csv qui ressemble à quelque chose comme ceci:
name,age,weight
bob,25,200
jim,31,180
- double possible de l'écriture de l'en-tête au format csv python avec DictWriter
Vous devez vous connecter pour publier un commentaire.
EDIT: Mon avant la solution de ne pas traiter la commande. Comme l'a noté Wilduck, DictWriter est plus approprié ici.
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
au lieu dedict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
pour obtenir toutes les clés dans la liste (si vous avez certains qui n'ont pas toutes les clés.)En Python csv module il y a un DictWriter qui sera probablement utile.
c'est quand vous avez une liste des dictionnaires:
Parce @User et @BiXiC demandé de l'aide avec l'encodage UTF-8 ici une variante de la solution par @Matthieu. (Je ne suis pas autorisé à faire des commentaires, je suis donc de répondre.)
En python 3 choses sont un peu différentes, mais de façon plus simple et moins sujette aux erreurs. C'est une bonne idée de dire à partir d'un fichier CSV de votre fichier doit être ouvert avec
utf8
l'encodage, car il rend les données plus facilement transférables à d'autres (en supposant que vous n'utilisez pas plus restrictives d'encodage, commelatin1
)csv
en python 3 a besoin de lanewline=''
paramètre, sinon vous obtiendrez des lignes vides dans un fichier CSV lors de l'ouverture dans excel opencalc.Sinon: je préfère utiliser pour le csv gestionnaire dans la
pandas
module. Je trouve qu'il est plus tolérant à des problèmes d'encodage, et pandas fera automatiquement la conversion des numéros de chaîne dans ces volumes dans le bon type (int,float,etc) lors du chargement du fichier.Remarque:
utf8
en python3, et de comprendre les en-têtes de trop.dataframe.to_dict('records')
csv
module, vous avez besoin de nourrir uneOrderedDict
ou qu'elles apparaissent dans un ordre aléatoire (si l'on travaille en python < 3.5). Voir: La préservation de l'ordre des colonnes en Python Pandas DataFrame pour plus d'.Voici un autre, plus général, de solution en supposant que vous n'avez pas une liste de lignes (peut-être qu'ils ne rentrent pas dans la mémoire) ou une copie de l'en-tête (peut-être le
write_csv
fonction générique):Note: le OrderedDict constructeur utilisé ici seulement à préserver l'ordre dans python >3.4. Si la commande est importante, utilisez la
OrderedDict([('name', 'bob'),('age',25)])
forme.Ce serait le moyen le plus simple pour écrire des données à .csv fichier