python - 使用 DictReader 从 CSV 文件读取到列表中

标签 python csv dictionary python-3.6

代码:

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

我找不到解决方案,为什么我的输出与这个问题的输出不同:Convert a csv.DictReader object to a list of dictionaries?

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

最佳答案

那是因为他们在 python 3.6 中更改了 csv.DictReader 的实现。这个新实现中有趣的是,键像 header 一样排序,并且由 OrderedDict 对象保证(即使在 Python 3.6 中所有字典都是有序的,但这被认为是一个实现细节,所以 csv 模块不依赖于它)

之前您的代码返回一个字典列表,现在它返回一个列表或有序字典,这是一个特化。

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

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

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', 'E-Mail': 'sdf'}, {'Anrede': '123123', 'Vorname': '213213', 'Nachname': '213123', 'Strasse': '123213', 'Hausnummer': '12312', 'PLZ': '21323', 'Stadt': '23', 'Telefon1': '23', 'Telefon2': '23', 'E-Mail': '2'}]

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

关于python - 使用 DictReader 从 CSV 文件读取到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115041/

相关文章:

python - 如何将元素添加到 OrderedDict 的开头?

python - 如何设置 PyCharm 使 '^M' 不出现在 ubuntu 中

c++ - 在子类中调用父函数

java - 使用 Java 将分段函数转换为 CSV 文件

java - 在 Java Servlet 中下载 CSV 文件

java - 为什么我无法使用我的对象的副本从该映射中 get() ?

python - 在 matplotlib 中用矩形插值绘制一条线

python - Python 中未知大小的二维数组

python - 我怎么知道引发异常的确切命令?

javascript - Raphael js toFront() 方法扭曲