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

Python-CSV库

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 性能优化

  • 处理大量数据时考虑使用缓冲机制
  • 避免不必要的数据类型转换
http://www.jsqmd.com/news/267/

相关文章:

  • C++小白修仙记_LeetCode刷题_位运算
  • C++小白修仙记_LeetCode刷题_双指针
  • 前路漫漫亦灿灿 往事堪堪亦澜澜
  • 设计模式(C++)详解—单例模式(2) - 指南
  • 使用uv和pycharm搭建python开发环境
  • lc1032-字符流
  • 八股整理xdsm - 教程
  • C++小白修仙记_LeetCode刷题_哈希表
  • 【F#学习】字符串String
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • 深入解析:K8s学习笔记(二) Pod入门与实战
  • 现代汽车前瞻杯2025牛客暑期多校训练营3
  • 详细介绍:[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析
  • 实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平
  • 【F#学习】“变量”?绑定!
  • 2023 CCPC 深圳 F
  • 完整教程:【算法】双指针(三)[快慢指针]-快乐数
  • 9.19做题资料:哈希表查找时间复杂度分析
  • CF2143F Increasing Xor
  • 提到链接,你能想到什么
  • 实用指南:容器逃逸漏洞
  • 实用指南:容器逃逸漏洞
  • 深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展
  • 三种方式处理SpringBoot全局异常
  • 解题记录说是 | P3695 CYaRon!语
  • 分享一个极度精简的绿色的 五笔输入法
  • [GDKOI2023 提高组] 游戏 题解
  • CSP-J/S 2025 游记
  • 2025.9.19 计数dp小记