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'}]
Jeśli separator nie jest faktycznie ,
trzeba określić " "
lub cokolwiek to jest.
Wystarczy, aby usunąć wszelkie nieporozumienia, kod działa dobrze dla python3.6 też, jedyną różnicą jest to, że za pomocą DictReader daje Orderdicts domyślnie:
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')])]
Można uzyskać dostęp do kluczy dokładnie to samo, tylko OrderedDict
trzyma klucz kolejność wstawiania:
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
które py3.6 faktycznie nie zbyt, więc jeśli z jakiegoś powodu naprawdę chcesz 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
Retencja zamawianie na wstawkę w py3.6 jest szczegółowo realizacja i może się zmienić, ale jeśli wystarczy nam go używać, to może po prostu pozostać :)
nie zgadza z Python 3.6, który powinien użyj 'print ([dict (d) dla d w czytniku])' –
@MattFletcher, działa dobrze w py3.6, co nie działa dla ciebie? Czy to dlatego, że widzisz 'OrderedDict's'? –
Tak, i dlatego nie można go poprawnie iterować. Nie jestem mistrzem Pythona, więc być może brakuje mi czegoś masywnego, ale przeczytałem, że sposób, w jaki działał został zmieniony w py3.6 - nie mogę na całe życie znaleźć wątku SO ... –