上一篇
Python字典写入CSV文件教程 - 实现步骤详解 | Python数据处理指南
- Python
- 2025-08-02
- 1926
Python字典写入CSV文件教程
使用csv.DictWriter实现高效数据存储
为什么使用字典写入CSV?
在Python数据处理中,使用字典写入CSV文件具有以下优势:
- 键值对应清晰 - 每列数据通过字段名明确标识
- 避免列位置错误 - 不依赖列顺序,按字段名写入
- 处理灵活 - 轻松添加/删除字段而不影响其他数据
- 代码可读性高 - 字段名称使代码更易于理解
实现步骤详解
步骤1:导入csv模块
Python内置的csv模块提供了处理CSV文件的功能,无需额外安装。
import csv
步骤2:准备字典数据
创建包含字典的列表,每个字典代表一行数据。
data = [
{"姓名": "张三", "年龄": 25, "城市": "北京", "职业": "工程师"},
{"姓名": "李四", "年龄": 30, "城市": "上海", "职业": "设计师"},
{"姓名": "王五", "年龄": 28, "城市": "广州", "职业": "产品经理"},
{"姓名": "赵六", "年龄": 35, "城市": "深圳", "职业": "数据分析师"}
]
步骤3:定义CSV文件字段名
确定CSV文件的列顺序和字段名称。
fieldnames = ["姓名", "年龄", "城市", "职业"]
步骤4:写入CSV文件
使用csv.DictWriter类写入数据:
with open('users.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 写入数据行
writer.writerows(data)
完整代码示例
import csv
# 准备数据 - 字典列表
data = [
{"姓名": "张三", "年龄": 25, "城市": "北京", "职业": "工程师"},
{"姓名": "李四", "年龄": 30, "城市": "上海", "职业": "设计师"},
{"姓名": "王五", "年龄": 28, "城市": "广州", "职业": "产品经理"},
{"姓名": "赵六", "年龄": 35, "城市": "深圳", "职业": "数据分析师"}
]
# 定义CSV列名
fieldnames = ["姓名", "年龄", "城市", "职业"]
# 写入CSV文件
with open('users.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 写入所有数据行
writer.writerows(data)
print("CSV文件写入完成!")
注意事项与技巧
1. 文件打开模式
使用'w'
模式会覆盖现有文件,使用'a'
模式可追加数据。
2. 处理中文编码
指定encoding='utf-8'
或encoding='gbk'
避免乱码问题。
3. 空行处理
设置newline=''
参数可避免行之间出现空行。
4. 缺失字段处理
对于可能缺失的字段,使用restval=''
设置默认值。
进阶应用场景
场景1:从API获取数据写入CSV
将从网络API获取的JSON数据转换为字典后写入CSV:
import requests
response = requests.get('https://api.example.com/users')
data = response.json()
with open('api_users.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
场景2:动态生成CSV文件
根据数据库查询结果动态生成CSV文件:
import sqlite3
import csv
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
# 获取列名
fieldnames = [description[0] for description in cursor.description]
# 转换为字典列表
data = [dict(zip(fieldnames, row)) for row in rows]
# 写入CSV
with open('db_users.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
本文由JingMianSai于2025-08-02发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257103.html
发表评论