用Python将CSV转换为字典

2,390 阅读4分钟

5/5 - (1票)

将 CSV 文件转换为 Python 字典的最好方法是使用open("my_file.csv") 创建一个 CSV 文件对象f 并将其传入csv.DictReader(f) 方法。返回值是一个可迭代的字典,在 CSV 文件中每行一个,它将第一行的列头映射到特定的行值。

接下来让我们看一下一个简单的例子来演示这个解决方案吧

基本解决方案。CSV到Dict的例子

下面是一个CSV文件的内容,"my_file.csv" ,用于我们下面的代码片断。

Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000

如果你把这个CSV文件以表格的形式可视化,它看起来像这样。

名称工作年龄收入
爱丽丝程序员23110000
鲍勃行政人员3490000
卡尔销售人员4550000

下面是将CSV文件转换成多个字典的代码,通过使用csv.DictReader(file) 函数,每行一个字典

import csv


csv_filename = 'my_file.csv'

with open(csv_filename) as f:
    reader = csv.DictReader(f)

    for row in reader:
        print(row)

字典是一个数据结构,它将键映射到值。

前面的代码片段的输出显示了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 到 Dict

我喜欢Python单行线。这就是为什么我写了一本关于这些的🙂

那么,我们能不能在Python的一行中把CSV转换为一个字典列表?

当然,我们可以!

这里的单行代码与之前讨论的代码完成了同样的任务。

import csv; print(*csv.DictReader(open('my_file.csv')), sep='\n')

💡 解释一下。我们导入 模块,使用csv.DictReader() csv 分号 ; 在一行中打包两个语句,在 语句中print 解压 * 输出的所有行,并使用换行符 作为两个字典行之间的'\n' 分隔符

输出结果和以前一样。

{'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内容存储在字典列表中,而不是打印它们,你可以使用下面的技术。

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'}]

如果你也对学习单行线感兴趣,请随时查看我的书。

Python One-Liners Book。首先要掌握单行字!

Python程序员将通过这些有用的单线句子提高他们的计算机科学技能。

Python One-Liners

Python单行线 将教你如何读和写 "单行本"。 简洁的有用功能声明被装入一行代码。 你将学会如何系统地解读和理解任何一行Python代码,并像专家一样写出雄辩的、具有强大压缩能力的Python。

本书的五个章节涵盖了(1)技巧和窍门,(2)正则表达式,(3)机器学习,(4)核心数据科学主题,和(5)有用的算法。

对单行线的详细解释介绍了 关键的计算机科学概念提高你的编码和分析能力.你将了解高级Python特性,如 列表理解, 分片, lambda函数, 正则表达式, 地图减少 职能,以及 分片作业.

你还将学习如何

  • 利用数据结构来解决现实世界的问题,比如使用布尔索引来寻找污染高于平均水平的城市
  • 使用NumPy的基础知识,如数组形状类型广播高级索引切片排序搜索聚合统计
  • 计算多维数据数组的基本统计数据 和无监督学习的K-Means算法
  • 使用分组命名组负数看头转义字符空白、字符集(和负数字符集)以及贪婪/非贪婪运算符创建更高级的正则表达式
  • 理解广泛的计算机科学主题,包括八卦宫格超集排列组合阶乘素数斐波那契数混淆搜索算法排序

在本书结束时,你将知道如何 以最精炼的方式编写Python并仅用一行就能创建简明、漂亮的 "Python 艺术 "作品。

在亚马逊上获取你的Python单行本!!