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'}]
If the delimiter is not really, you need to specify " " or something else.
Just to eliminate any confusion, the code works just fine for python3.6, the only difference is that using DictReader gives Orderdicts by 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')])]
You can access keys in the same way, OrderedDict just keeps the order of key input:
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
Which py3.6 really does, so if for some reason you really need a 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
Saving an order when pasting into py3.6 is an implementation detail and may change, but if you use it enough, it can just stay :)