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确实太少,因此,如果由于某种原因,你真的想要一个字典:
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)for d in reader])' – 2017-12-07 16:12:41
@MattFletcher,它在py3.6中工作正常,什么不适合你?是因为你看到OrderedDict's'吗? – 2017-12-07 16:39:01
是的,因此无法正确地迭代它。我不是一个Python大师,所以我可能会错过一些巨大的东西,但我读到它们的工作方式已在py3.6中改变 - 不能为我的生活找到SO线程... – 2017-12-07 16:41:47