Python CSV 库
1. 库概述
1.1 简介
CSV (Comma Separated Values) 是电子表格和数据库中最常见的数据交换格式。Python 的 csv 模块提供了读写 CSV 文件的功能,支持多种 CSV 变体和自定义格式。
1.2 主要功能
- 读写 CSV 格式数据
- 支持多种预定义格式(Excel、Unix等)
- 提供自定义格式选项
- 支持字典形式的数据读写
2. 核心类与函数
2.1 读取器类
csv.reader(csvfile, dialect='excel', **fmtparams)
创建一个读取器对象,用于逐行读取 CSV 数据。
参数说明:
- csvfile: 支持迭代器协议的文件对象,打开时应使用
newline=''
- dialect: CSV 方言,默认为 'excel'
- **fmtparams: 格式化参数
返回值:每行作为一个字符串列表。
csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
创建一个字典读取器对象,将每行数据映射为字典。
参数说明:
- f: 文件对象
- fieldnames: 字段名序列,如果省略则使用第一行作为字段名
- restkey: 用于存储多余字段的键名
- restval: 缺失值的默认值
2.2 写入器类
csv.writer(csvfile, dialect='excel', **fmtparams)
创建一个写入器对象,将数据转换为 CSV 格式。
参数说明:
- csvfile: 具有 write() 方法的文件对象,打开时应使用
newline=''
- dialect: CSV 方言,默认为 'excel'
- **fmtparams: 格式化参数
csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
创建一个字典写入器对象,将字典映射为 CSV 行。
参数说明:
- f: 文件对象
- fieldnames: 定义字典键顺序的序列
- restval: 缺失键的默认值
- extrasaction: 处理多余键的方式 ('raise' 或 'ignore')
3. 核心方法
3.1 DictWriter 方法
writeheader()
写入字段名作为表头。
writerow(rowdict)
写入单行字典数据。
writerows(rowdicts)
批量写入多行字典数据。
3.2 DictReader 方法
DictReader 作为迭代器使用,通过 for 循环逐行读取数据。
4. 使用示例
4.1 写入 CSV 文件
import csvfieldnames = ['name', 'age', 'city']with open('example.csv', 'w', newline='') as csvfile:writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()writer.writerow({'name': '张三', 'age': 25, 'city': '北京'})data = [{'name': '李四', 'age': 30, 'city': '上海'},{'name': '王五', 'age': 28, 'city': '广州'}]writer.writerows(data)
4.2 读取 CSV 文件
import csvwith open('example.csv', 'r', newline='') as csvfile:reader = csv.DictReader(csvfile)for row in reader:print(row['name'], row['age'], row['city'])
5. 最佳实践
5.1 文件操作
- 始终使用
newline=''
打开文件以确保跨平台兼容性 - 使用上下文管理器(with 语句)确保文件正确关闭
5.2 数据处理
- 根据数据特点选择合适的引用策略
- 合理使用 dialect 机制简化格式配置
- 对于未知格式的 CSV 文件,使用 Sniffer 类自动检测格式
5.3 性能优化
- 处理大量数据时考虑使用缓冲机制
- 避免不必要的数据类型转换