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.

3voto

cloudyBlues Points 75

Si vous êtes d'accord pour utiliser le paquet numpy, vous pouvez faire quelque chose comme ce qui suit :

import numpy as np

lines = np.genfromtxt("coors.csv", delimiter=",", dtype=None)
my_dict = dict()
for i in range(len(lines)):
   my_dict[lines[i][0]] = lines[i][1]

3voto

TheTechGuy Points 753

Avec les pandas, c'est beaucoup plus facile, par exemple. supposons que vous ayez les données suivantes au format CSV et que vous les appeliez test.txt / test.csv (vous savez que CSV est une sorte de fichier texte)

a,b,c,d
1,2,3,4
5,6,7,8

utilise maintenant pandas

import pandas as pd
df = pd.read_csv("./text.txt")
df_to_doct = df.to_dict()

pour chaque ligne, ce serait

df.to_dict(orient='records')

et c'est tout.

2voto

user455806 Points 36

Vous pouvez l'utiliser, c'est plutôt cool :

import dataconverters.commas as commas
filename = 'test.csv'
with open(filename) as f:
      records, metadata = commas.parse(f)
      for row in records:
            print 'this is row in dictionary:'+rowenter code here

2voto

De nombreuses solutions ont été proposées et j'aimerais contribuer avec la mienne, qui fonctionne pour un nombre différent de colonnes dans le fichier CSV. Elle crée un dictionnaire avec une clé par colonne, et la valeur de chaque clé est une liste avec les éléments de cette colonne.

    input_file = csv.DictReader(open(path_to_csv_file))
    csv_dict = {elem: [] for elem in input_file.fieldnames}
    for row in input_file:
        for key in csv_dict.keys():
            csv_dict[key].append(row[key])

1voto

Essayez d'utiliser un defaultdict y DictReader .

import csv
from collections import defaultdict
my_dict = defaultdict(list)

with open('filename.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for line in csv_reader:
        for key, value in line.items():
            my_dict[key].append(value)

Il revient :

{'key1':[value_1, value_2, value_3], 'key2': [value_a, value_b, value_c], 'Key3':[value_x, Value_y, Value_z]}

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