在 Python 中将字典写入 CSV

Rayven Esplanada 2021年7月20日 2021年1月22日
在 Python 中将字典写入 CSV

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

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

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

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

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

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

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

import 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 布局也需要改变,因为有多个相同键的值。

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

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

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

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

import 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 错误。

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