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 en tant que:
a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}]
Comment puis-je faire ceci?
Utilisation 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}]
Utilisation du module csv
et d'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}]
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
# 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]
Eh bien, alors que d'autres personnes le faisaient intelligemment, je l'ai implémenté naïvement. Je suppose que mon approche a l'avantage de ne pas avoir besoin de modules externes, même si elle échouera probablement avec des configurations de valeurs étranges. Ici, c'est juste pour 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))})
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)
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 devant être un dictionnaire (clé, paire de valeurs). 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: