convertir le fichier csv en liste de dictionnaires

J'ai un fichier csv

col1, col2, col3
1, 2, 3
4, 5, 6

Je veux créer une liste de dictionnaire à partir de ce csv.

Sortie comme:

a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}]

Comment puis-je faire cela?

25
demandé sur falsetru 2014-02-05 12:34:56

7 réponses

Utiliser csv.DictReader:

>>> import csv
>>>
>>> with open('test.csv') as f:
...     a = [{k: int(v) for k, v in row.items()}
...          for row in csv.DictReader(f, skipinitialspace=True)]
...
>>> a
[{'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}]
45
répondu falsetru 2014-02-05 08:46:22

En utilisant le module csv et une compréhension de liste:

import csv
with open('foo.csv') as f:
    reader = csv.reader(f, skipinitialspace=True)
    header = next(reader)
    a = [dict(zip(header, map(int, row))) for row in reader]
print a    

Sortie:

[{'col3': 3, 'col2': 2, 'col1': 1}, {'col3': 6, 'col2': 5, 'col1': 4}]
5
répondu Ashwini Chaudhary 2014-02-05 08:49:50

Une autre réponse plus simple:

    import csv
    with open("configure_column_mapping_logic.csv", "r") as f:
        reader = csv.DictReader(f)
        a = list(reader)
        print a
3
répondu Simon 2018-05-18 02:07:53

Eh bien, alors que d'autres personnes le faisaient de manière intelligente, Je l'ai implémenté naïvement. Je suppose que mon approche a l'avantage de ne pas avoir besoin de modules externes, bien qu'elle échouera probablement avec des configurations étranges de valeurs. Ici, il est juste pour la référence:

a = []
with open("csv.txt") as myfile:
    firstline = True
    for line in myfile:
        if firstline:
            mykeys = "".join(line.split()).split(',')
            firstline = False
        else:
            values = "".join(line.split()).split(',')
            a.append({mykeys[n]:values[n] for n in range(0,len(mykeys))})
1
répondu user3030010 2014-02-05 08:55:00
# similar solution via namedtuple:    

import csv
from collections import namedtuple

with open('foo.csv') as f:
  fh = csv.reader(open(f, "rU"), delimiter=',', dialect=csv.excel_tab)
  headers = fh.next()
  Row = namedtuple('Row', headers)
  list_of_dicts = [Row._make(i)._asdict() for i in fh]
1
répondu MOCKBA 2016-05-10 23:46:49

Méthode Simple pour analyser CSV dans la liste des dictionnaires

with open('/home/mitul/Desktop/OPENEBS/test.csv', 'rb') as infile:
header = infile.readline().split(",")
for line in infile:
fields = line.split(",")
entry = {}
for i,value in enumerate(fields):
  entry[header[i].strip()] = value.strip()
data.append(entry)
0
répondu Mitul Panchal 2017-10-27 07:42:47

Pour convertir un fichier CSV (deux colonnes, plusieurs lignes, pas d'en-tête) en une liste de dictionnaires, j'ai utilisé le module csv. Mon fichier csv ressemblait à ceci:

c1,-------- 
c14,EAE23ED3 
c15,-------- 

, je voulais créer une liste de dictionnaires, chaque ligne du fichier csv pour être un dictionnaire (clé, valeur). La sortie que je voulais était:

[
{
    "c1": "--------"
}, 
{
    "c14": "EAE23ED3"
}, 
{
    "c15": "--------"
}
]

Pour ce faire j'ai utilisé le code ci-dessous:

import csv

csv_path = '.../input_file.csv'

mylist = []
mydict = {}

# read the csv and write to a dictionary
with open(csv_path, 'rb') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        mydict = {row[0]:row[1]}
        mylist.append(mydict)

print(mylist)

Cela fonctionne dans mon cas. Pour résoudre mon problème, ces messages ont été utiles:

0
répondu parovelb 2018-10-02 10:39:06