221 votes

Créer un dictionnaire à partir d'un fichier csv ?

J'essaie de créer un dictionnaire à partir d'un fichier csv. La première colonne du fichier csv contient des clés uniques et la deuxième colonne contient des valeurs. Chaque ligne du fichier csv représente une paire clé/valeur unique dans le dictionnaire. J'ai essayé d'utiliser la fonction csv.DictReader y csv.DictWriter mais je n'ai pas trouvé comment générer un nouveau dictionnaire pour chaque ligne. Je veux un seul dictionnaire. Voici le code que j'essaie d'utiliser :

import csv

with open('coors.csv', mode='r') as infile:
    reader = csv.reader(infile)
    with open('coors_new.csv', mode='w') as outfile:
    writer = csv.writer(outfile)
    for rows in reader:
        k = rows[0]
        v = rows[1]
        mydict = {k:v for k, v in rows}
    print(mydict)

Lorsque j'exécute le code ci-dessus, j'obtiens un message ValueError: too many values to unpack (expected 2) . Comment créer un dictionnaire à partir d'un fichier csv ? Merci d'avance.

1voto

Ion Harin Points 21

Voici une approche pour le passage de CSV à Dict :

import pandas

data = pandas.read_csv('coors.csv')

the_dictionary_name = {row.k: row.v for (index, row) in data.iterrows()}

0voto

Canute S Points 194

Si vous avez :

  1. Seulement 1 clé et 1 valeur comme clé,valeur dans votre csv
  2. Ne pas importer d'autres paquets
  3. Vous souhaitez créer une dictée en une seule fois

Faites ceci :

mydict = {y[0]: y[1] for y in [x.split(",") for x in open('file.csv').read().split('\n') if x]}

Que fait-il ?

Il utilise la compréhension de liste pour diviser les lignes et le dernier "if x" est utilisé pour ignorer les lignes vides (généralement à la fin) qui sont ensuite décompressées dans un dict à l'aide de la compréhension de dictionnaire.

0voto

mirekphd Points 11

La question nous a fait dévier de la bonne solution... qui nécessite de prendre du recul et de se demander si nous avons choisi le bon format pour stocker les données d'un dictionnaire. Pour un dictionnaire, un fichier CSV est un format avec perte qui transforme silencieusement toutes les valeurs numériques en valeurs de chaîne de caractères... la bonne réponse serait donc IMO to l'enregistrer en JSON en premier lieu.

Et puis tout simplement :

import json
my_dict = json.load(open('my_file.json', 'r'))

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