当前位置:首页 > Python > 正文

Python字典写入CSV文件教程 - 实现步骤详解 | Python数据处理指南

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)

发表评论