Python:csv 库高级用法举例和应用详解

Python:csv库高级用法举例和应用详解

模块介绍

Python 的 csv 模块是标准库的一部分,自带于所有 Python 3 发行版中,无需额外安装。csv 模块提供用于读取和写入 CSV(Comma Separated Values)文件的类和方法。CSV 文件是一种广泛用于数据交换的文本格式,特别是在表格数据的传输中。

csv 模块适配所有 Python 3 版本,确保了其在数据处理任务中的一致性和可靠性。通过简单的接口和灵活的参数配置,用户可以轻松处理不同格式和复杂度的 CSV 文件。

应用场景

csv 模块主要用于以下应用场景:

  1. 数据导入和导出:从 Excel 和数据库系统导出数据并导入到 Python 进行处理,或将处理后的数据导出为 CSV 文件以便共享或存储。
  2. 数据清理和转换:使用 csv 模块可以方便地对数据进行清洗、过滤和格式转换,例如去除空行、修改字段格式等。
  3. 数据分析和报告生成:读取 CSV 文件后,可以进行数据分析、统计计算并生成各类报告。
  4. 配置文件处理:简单的配置数据常以 CSV 格式存储,通过 csv 模块可以快速读取和解析这些配置。

安装说明

csv 模块是 Python 标准库的一部分,默认随 Python 3 一起安装,无需单独安装。您只需确保已安装 Python 3,然后在代码中导入 csv 模块即可。

1
import csv  # 导入csv模块

用法举例

示例一:读取 CSV 文件

假设我们有一个简单的 CSV 文件 data.csv,内容如下:

1
2
3
4
name,age,city
John Doe,28,New York
Jane Smith,34,Los Angeles
Emily Jones,22,Chicago

我们想读取这个 CSV 文件并将数据打印出来。

1
2
3
4
5
6
7
8
9
import csv  # 导入csv模块

# 读取CSV文件并打印每行数据
with open('data.csv', mode='r', newline='', encoding='utf-8') as file: # 打开CSV文件
csv_reader = csv.reader(file) # 创建CSV读取对象
header = next(csv_reader) # 读取并打印表头
print(f'Header: {header}')
for row in csv_reader: # 逐行读取数据
print(f'Row: {row}')

示例二:写入 CSV 文件

我们需要将一些数据写入一个新的 CSV 文件 output.csv,数据如下:

1
2
3
4
5
6
data = [
['name', 'age', 'city'],
['Alice Brown', 29, 'San Francisco'],
['Bob Smith', 23, 'Denver'],
['Charlie Johnson', 45, 'Houston']
]

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import csv  # 导入csv模块

data = [
['name', 'age', 'city'], # 表头
['Alice Brown', 29, 'San Francisco'], # 数据行
['Bob Smith', 23, 'Denver'], # 数据行
['Charlie Johnson', 45, 'Houston'] # 数据行
]

# 将数据写入CSV文件
with open('output.csv', mode='w', newline='', encoding='utf-8') as file: # 打开文件,写模式
csv_writer = csv.writer(file) # 创建CSV写入对象
for row in data: # 逐行写入数据
csv_writer.writerow(row)

示例三:使用字典来读取和写入 CSV 文件

有时候,我们希望能通过列名来访问数据,这时可以使用 DictReaderDictWriter

读取 data.csv 文件,并通过列名访问数据:

1
2
3
4
5
6
7
import csv  # 导入csv模块

# 使用DictReader通过列名读取CSV文件
with open('data.csv', mode='r', newline='', encoding='utf-8') as file: # 打开CSV文件
csv_dict_reader = csv.DictReader(file) # 创建CSV字典读取对象
for row in csv_dict_reader: # 逐行读取数据
print(f"{row['name']} is {row['age']} years old and lives in {row['city']}.")

写入 output_dict.csv 文件,数据如下:

1
2
3
4
5
data = [
{'name': 'David Lee', 'age': 39, 'city': 'Miami'},
{'name': 'Emma Davis', 'age': 25, 'city': 'Seattle'},
{'name': 'Frank Harris', 'age': 33, 'city': 'Portland'}
]

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import csv  # 导入csv模块

# 数据列表
data = [
{'name': 'David Lee', 'age': 39, 'city': 'Miami'}, # 字典形式的数据
{'name': 'Emma Davis', 'age': 25, 'city': 'Seattle'}, # 字典形式的数据
{'name': 'Frank Harris', 'age': 33, 'city': 'Portland'} # 字典形式的数据
]

# 将数据写入CSV文件
with open('output_dict.csv', mode='w', newline='', encoding='utf-8') as file: # 打开文件,写模式
fieldnames = ['name', 'age', 'city'] # 定义列名
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames) # 创建CSV字典写入对象
csv_dict_writer.writeheader() # 写入表头
for row in data: # 逐行写入数据
csv_dict_writer.writerow(row)

结论

Python 的 csv 模块是处理 CSV 文件的强大工具,通过本文的详细介绍和实例,读者应能掌握在不同场景下使用 csv 模块的技巧。它不仅易学易用,而且功能强大,可以满足大部分 CSV 数据处理的需求。

强烈建议大家关注我的博客 “全糖冲击博客”,我的博客包含所有 Python 标准库使用教程,方便查询和学习。关注 “全糖冲击博客”,你将能够:

  1. 快速找到各种 Python 标准库的详细教程,节省时间,提高工作效率。
  2. 获取最新的 Python 库更新资讯,始终掌握前沿技术动态。
  3. 参与社区讨论,与其他 Python 开发者分享经验和技巧。
  4. 定期获得独家 Python 编程技巧和最佳实践指南,提升你的编程水平。

关注我的博客,让我们一起进步,共同探索 Python 的无限可能!

软件版本可能变动

如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang