繁体   English   中英

使用DictReader从CSV读入列表

[英]Read from CSV into a list with DictReader

编码:

def import_csv():

    with open('list.csv') as csvfile:
        reader = csv.DictReader(csvfile,delimiter=",")
        print(list(reader))

输出是:

[OrderedDict([('Anrede', 'asfsf'), ('Vorname', 'dsfsdfsd'), ('Nachname', 'sdfsdfdsf'), ('Strasse', 'sdfsdfsd'), ('Hausnummer', 'sdf'), ('PLZ', 'dsf'), ('Stadt', 'dsf'), ('Telefon1', 'dsf'), ('Telefon2', 'sdf'), ('E-Mail', 'sdf')]), OrderedDict([('Anrede', '123123'), ('Vorname', '213213'), ('Nachname', '213123'), ('Strasse', '123213'), ('Hausnummer', '12312'), ('PLZ', '21323'), ('Stadt', '23'), ('Telefon1', '23'), ('Telefon2', '23'), ('E-Mail', '2')])]

我的CSV文件如下:

Anrede,Vorname,Nachname,Strasse,Hausnummer,PLZ,Stadt,Telefon1,Telefon2,E-Mail
asfsf,dsfsdfsd,sdfsdfdsf,sdfsdfsd,sdf,dsf,dsf,dsf,sdf,sdf
123123,213213,213123,123213,12312,21323,23,23,23,2

我找不到解决方案,为什么我的输出与此问题相同: 将csv.DictReader对象转换为字典列表?

我想将行作为dict读取,标题信息作为键,然后将所有这些作为列表保存在一起。

那是因为他们改变了python 3.6中csv.DictReader的实现。 这个新实现的有趣之处在于键是按照标题排序的,并且它由OrderedDict对象保证(即使在Python 3.6中,所有dicts都是有序的,但这被视为实现细节,因此csv模块不依赖于它)

以前你的代码返回了一个字典列表,现在它返回一个列表或有序的字典,这是一个专业化。

你担心数据的表示,但它会工作正常,它们仍然是字典(例如print(list(reader)[0]['Anrede'])

只是为了让您放心,只是尝试转换为标准字典:

print([dict(d) for d in reader])

你会得到

[{'Anrede':'asfsf','Vorname':'dsfsdfsd','Nachname':'sdfsdfdsf','Strasse':'sdfsdfsd','Hausnummer':'sdf','PLZ':'dsf', 'Stadt':'dsf','Telefon1':'dsf','Telefon2':'sdf','电子邮件':'sdf'},{'Anrede':'123123','Vorname':'213213 ','Nachname':'213123','Strasse':'123213','Hausnummer':'12312','PLZ':'21323','Stadt':'23','Telefon1':'23', 'Telefon2':'23','电子邮件':'2'}]

就像你在早期版本的python上运行代码一样。

高达3.6版本,DictReader生成普通的dicts。 这改变了3.6。 这就是为什么你没有得到与你放置的链接相同的结果。 使用早期版本获取字典。 或坚持使用3.6 - OrderedDict也是很棒的数据结构。

在版本3.6中更改:返回的行现在是OrderedDict类型。

https://docs.python.org/3/library/csv.html#csv.DictReader

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM