在 Python 中将字典写入 CSV

在 Python 中将字典写入 CSV

本教程将介绍如何在 Python 中将一个字典变量写入 csv 文件。

在 Python 中使用 csv 模块将一个字典写入 CSV 文件

Python 模块 csv 包含了操作 csv 文件的工具和函数。有两种简单的方法可以用来将字典写入 csv 文件。writer()DictWriter()

这两个方法的功能类似,唯一不同的是 DictWriter() 是一个包含更多功能的封装类。

让我们用一个带有几个键-值对的字典设置一个初始示例:

Python
 pythonCopydct = {"Name": "John", "Age": "23", "Country": "USA"}

在第一个例子中,我们使用 writer() 来访问一个新的 csv 文件并将字典插入其中。

Python
 pythonCopyimport csv

dct = {"Name": "John", "Age": "23", "Country": "USA"}

with open("dct.csv", "w") as f:
    writer = csv.writer(f)
    for k, v in dct.items():
        writer.writerow([k, v])

由于文件访问类型是 w,csv 文件 dct.csv 的内容将被新的更改覆盖。如果该文件不存在,那么它将在同一目录下自动创建。

csv 文件的内容将输出:

CSV 文件

由于只有一个字典条目,csv 文件的布局在第一列中包含了所有的键,而值在第二列中。

使用字典数组的例子

这是一个单一字典的例子。如果你想在一个 csv 文件中插入多个字典怎么办?

在这个例子中,将使用函数 DictWriter() 来写入 csv 文件。第一个例子的 CSV 布局也需要改变,因为有多个相同键的值。

第一行应该包含键标签,随后的几行将包含每个字典条目的值。

首先,声明一个具有相同键值的字典数组。

Python
 pythonCopydct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

现在使用 csv 模块和 DictWriter() 将这个字典数组写入 csv 文件。

Python
 pythonCopyimport csv

labels = ["Name", "Age", "Country"]
dct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

try:
    with open("csv_dct.csv", "w") as f:
        writer = csv.DictWriter(f, fieldnames=labels)
        writer.writeheader()
        for elem in dct_arr:
            writer.writerow(elem)
except IOError:
    print("I/O error")

DictWriter() 中的参数 fieldnames 分配给变量 labels,它是一个字典数组的键标签数组。

练习用异常处理(try ... except)来包装操作文件的代码也是不错的。这是为了防止外部错误或关于文件写入过程的不兼容。

输出:

CSV 文件数组

总而言之,csv 模块包含了所有必要的功能和工具,以将字典写入 csv 文件。使用函数 writer()DictWriter() 都可以很容易地实现这个功能。

另外要注意的是,要把操作文件的块用异常处理包起来,以确保在它破坏东西之前就能捕获到 IO 错误。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相关文章 - Python CSV

相关文章 - Python Dictionary