import csv
with open("in.csv") as csvfile:
reader = csv.DictReader(csvfile,delimiter=" ")
print(list(reader))
[{'first_name': 'Baked', 'last_name': 'Beans'}, {'first_name': 'Lovely', 'last_name': 'Spam'}, {'first_name': 'Wonderful', 'last_name': 'Spam'}]
Se il delimitatore non è in realtà un ,
è necessario specificare " "
o qualunque cosa sia.
Giusto per chiarire qualsiasi confusione, il codice funziona bene per python3.6 anche, l'unica differenza è che l'utilizzo DictReader dà Orderdicts di default:
In [1]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: print(list(reader))
...:
[OrderedDict([('first_name', 'Baked'), ('last_name', 'Beans')]), OrderedDict([('first_name', 'Lovely'), ('last_name', 'Spam')]), OrderedDict([('first_name', 'Wonderful'), ('last_name', 'Spam')])]
È possibile accedere alle chiavi esattamente lo stesso, un solo OrderedDict
mantiene ordine di inserimento chiave:
In [2]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in reader:
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
Baked Beans
Lovely Spam
Wonderful Spam
Quali py3.6 in realtà lo fa troppo, quindi se per qualche motivo si vuole veramente un dict:
In [5]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in map(dict, reader):
...: print(dct)
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
{'first_name': 'Baked', 'last_name': 'Beans'}
Baked Beans
{'first_name': 'Lovely', 'last_name': 'Spam'}
Lovely Spam
{'first_name': 'Wonderful', 'last_name': 'Spam'}
Wonderful Spam
La ritenzione ordinamento all'inserimento in py3.6 è un dettaglio di implementazione e possono cambiare, ma se abbastanza di noi lo usano, si può solo dovuto rimanere :)
non corrette in Python 3.6, che dovrebbe usa 'print ([dict (d) per d nel lettore])' –
@MattFletcher, funziona bene in py3.6, cosa non funziona per te? È perché vedi 'OrderedDict's'? –
Sì, quindi non può scorrere correttamente su di esso. Non sono un maestro di Python quindi potrei mancare qualcosa di enorme, ma ho letto che il modo in cui ha funzionato è stato modificato in py3.6 - non riesco a trovare la filatura SO ... –