J'ai ce que je pense devrait être une tâche très facile que je ne semble pas pouvoir résoudre.
Comment écrire un dictionnaire Python dans un fichier csv? Tout ce que je veux, c’est d’écrire les clés du dictionnaire sur la première ligne du fichier et les valeurs de la clé sur la deuxième ligne.
Le plus proche que je suis venu est le suivant (que j'ai eu de quelqu'un d'autre post):
f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()
Le problème est que le code ci-dessus semble n'écrire que les clés de la première ligne et c'est tout. Je ne reçois pas les valeurs écrites à la deuxième ligne.
Des idées?
Vous utilisez DictWriter.writerows()
qui attend une liste de dictés, pas un dict. Vous voulez que DictWriter.writerow()
écrive une seule ligne.
Vous voudrez aussi utiliser DictWriter.writeheader()
si vous voulez un en-tête pour votre fichier csv.
Vous pouvez également vouloir extraire l'instruction with
pour ouvrir des fichiers . Il est non seulement plus lisible et lisible, mais gère également la fermeture pour vous, même en cas d’exceptions.
Exemple avec ces modifications apportées:
import csv
my_dict = {"test": 1, "testing": 2}
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
w = csv.DictWriter(f, my_dict.keys())
w.writeheader()
w.writerow(my_dict)
Qui produit:
test,testing
1,2
Votre code était très prêt à fonctionner.
Essayez d’utiliser un csv.writer plutôt qu'un DictWriter. Ce dernier est principalement utilisé pour rédiger une liste de dictionnaires.
Voici un code qui écrit chaque paire clé/valeur sur une ligne distincte:
import csv
somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerows(somedict.items())
Si vous voulez plutôt que toutes les clés sur une ligne et toutes les valeurs sur la suivante, c'est aussi simple:
with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerow(somedict.keys())
w.writerow(somedict.values())
Astuce: Lorsque vous développez un code comme celui-ci, réglez le rédacteur sur w = csv.writer(sys.stderr)
pour que vous puissiez plus facilement voir ce qui est généré. Lorsque la logique est terminée, revenez à w = csv.writer(f)
.