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'}]
Если разделитель не на самом деле ,
вам нужно указать " "
или что-то.
Просто, чтобы очистить путаницы, код прекрасно подходит для python3.6 также работает, единственное отличие состоит в том, что с помощью DictReader дает Orderdicts по умолчанию:
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')])]
Вы можете получить доступ ключи точно теми же самыми, OrderedDict
просто сохраняет ключ порядок вставки:
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
Какие py3.6 на самом деле делает тоже, так что если по какой-то причине вы действительно хотите 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
Сохранение упорядочения при вставке в py3.6 является деталью реализации и может измениться, но если достаточно многие из нас использует его, он может просто остаться :)
Не правильно с Python 3.6, который должен используйте 'print ([dict (d) для d в читателе])' –
@MattFletcher, он отлично работает в py3.6, что не работает для вас? Это потому, что вы видите «OrderedDict»? –
Да, и поэтому не может правильно перебирать его. Я не являюсь мастером Python, поэтому мне может не хватать чего-то массивного, но я читал, что они как-то изменились в py3.6 - не может для меня жизнь найти SO-поток ... –