用三个步骤将CSV文件转换为Python字典的列表。
- 使用
open("my_file.csv")
,创建一个CSV文件对象f
,并在csv.DictReader(f)
方法中传递它。 - 返回值是一个可迭代的字典,在CSV文件中每行一个。每个字典将第一行的列头映射到特定的行值。
- 作为最后一步,使用 Python 内置的
list()
函数将字典的可迭代性转换为一个列表。
接下来让我们看一下一个简单的例子来演示这个解决方案!
基本解决方案。CSV到字典列表 - 示例
下面是一个CSV文件的内容,"my_file.csv"
,用于我们下面的代码片断。
Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000
如果你把这个CSV文件以表格的形式显示出来,它看起来像这样。
名称 | 工作 | 年龄 | 收入 |
---|---|---|---|
爱丽丝 | 程序员 | 23 | 110000 |
鲍勃 | 行政人员 | 34 | 90000 |
卡尔 | 销售人员 | 45 | 50000 |
下面是将CSV文件转换成字典列表的代码,通过使用csv.DictReader(file)
函数,每行一个字典。
import csv
csv_filename = 'my_file.csv'
with open(csv_filename) as f:
reader = csv.DictReader(f)
lst = list(*reader)
字典是一个数据结构,它将键映射到值。
前面的代码片断的结果是一个字典的列表。CSV的第一行被用作头,以确定被映射到CSV文件各行中定义的值的字典的键。
[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]
csv.DictReader(f)
方法需要一个文件对象f
作为输入参数。因此,你首先需要使用内置的Python [open()](https://blog.finxter.com/python-open-function/)
函数打开。
注意:一个常见的错误是把文件名作为一个字符串来传递--但这不起作用! 方法希望有一个文件对象作为必要参数。
csv.DictReader(f)
单行式解决方案。CSV 到 Dicts 列表
那么,我们能不能在 Python 的一行中把 CSV 转换为字典列表呢?
当然,我们可以!
这里的单行代码完成了与前面讨论的代码相同的内容。
import csv; lst = list(*csv.DictReader(open('my_file.csv')))
解释一下。我们导入 模块,使用
csv
分号 ;
将两个语句打包在一行中,将 ,*
将 csv.DictReader()
输出的所有行作为参数解压到 [list()](https://blog.finxter.com/python-list/)
内置函数。
结果被存储在变量lst
中,该变量现在持有与之前相同的列表。
[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]
下面是一个类似的替代方案,但也是在一行中打印列表--现在解包发生在括号内的符号[]
。
import csv; lst=[*csv.DictReader(open('my_file.csv'))]; print(lst)
输出是一个字典列表,在原始CSV中每行(非标题)一个。
[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}, {'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}, {'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]