Python读写Csv文件
Python读写CSV文件
一、CSV 文件介绍
CSV(Comma-Separated Values,逗号分隔值)是一种轻量级的纯文本数据格式,广泛用于在不同平台、系统之间进行结构化数据交换。
📌 CSV 文件的关键特征:
- 每行表示一条记录(Record)
- 字段(列)之间使用 分隔符(通常是逗号
,
)分开 - 文件是 纯文本,编码格式通常为 UTF-8 或 ASCII
- 各行字段数通常保持一致,字段顺序固定
📚 典型应用场景:
场景 | 示例 |
---|---|
数据导入导出 | Excel、MySQL、PostgreSQL 等可导出/导入 CSV |
系统间交换 | 系统 A 生成,系统 B 消费 |
数据分析 | 数据科学中读取大型数据集 |
报表持久化 | 将报表数据写入 CSV 后备份或共享 |
✅ 优势:通用性强、体积小、易于处理 ❌ 劣势:不支持嵌套结构、不支持数据类型定义
二、将数据写入 CSV 文件(序列化为 CSV)
使用 csv.writer
写入 CSV
import csv
import random
with open('scores.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['姓名', '语文', '数学', '英语'])
names = ['关羽', '张飞', '赵云', '马超', '黄忠']
for name in names:
row = [name] + [random.randint(60, 100) for _ in range(3)]
writer.writerow(row)
参数详解:
参数 | 说明 |
---|---|
'w' |
写入模式,文件不存在则创建 |
newline='' |
防止 Windows 下出现空行问题 |
encoding='utf-8' |
保证中文写入无乱码 |
示例输出内容(scores.csv):
姓名,语文,数学,英语
关羽,93,87,78
张飞,78,66,99
...
三、自定义 CSV 写入格式
writer = csv.writer(file, delimiter='|', quoting=csv.QUOTE_ALL)
可选参数解析:
参数 | 含义 | ||
---|---|---|---|
`delimiter=' | '` | 字段之间使用 ` | ` 而非逗号 |
quoting=csv.QUOTE_ALL |
所有字段都用双引号包裹,避免特殊符号引起歧义 |
输出效果:
"姓名"|"语文"|"数学"|"英语"
"赵云"|"85"|"92"|"76"
...
四、从 CSV 文件读取数据(反序列化为列表)
使用 csv.reader
读取 CSV:
import csv
with open('scores.csv', 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(f'第{reader.line_num}行:', row)
功能说明:
- 每行被解析为
list
reader.line_num
返回当前行号(从 1 开始)
示例输出:
第1行: ['姓名', '语文', '数学', '英语']
第2行: ['关羽', '89', '90', '78']
...
设置定制分隔符:
reader = csv.reader(file, delimiter='|')
五、最佳实践与使用建议
✅ 推荐做法:
建议 | 理由 |
---|---|
使用 with open(...) |
自动关闭文件,避免资源泄露 |
使用 newline='' |
跨平台避免空行问题 |
指定 encoding |
保障跨平台兼容(特别是处理中文) |
使用 writerow() /reader 处理行数据 |
提高代码清晰度与安全性 |
⚠️ 常见误区:
- 不加
newline=''
会在 Windows 下多出空行 - 写入中文但未指定编码,易导致乱码
- 使用
writerow()
写入单个元素时未封装为列表会报错
六、pandas 中读写 CSV(高级方式推荐)
pandas
是数据分析的核心库之一,其 read_csv
和 to_csv
方法极其强大:
import pandas as pd
df = pd.read_csv('scores.csv')
print(df.head())
df.to_csv('new_scores.csv', index=False, encoding='utf-8')
pandas.read_csv()
强大特性:
- 自动识别列名与数据类型
- 支持设置编码、分隔符、跳过行数等
- 支持处理空值、缺失值、日期时间等高级特性
函数 | 用法 |
---|---|
read_csv() |
读取 CSV 并返回 DataFrame |
to_csv() |
将 DataFrame 保存为 CSV 文件 |
DataFrame
是二维表结构,类似数据库中的表或 Excel 表格。
七、拓展应用场景举例
✅ 报表系统导出:
生成销售、库存、考试成绩等 CSV 文件供下载或备份
✅ 批量数据导入:
将业务系统中成批数据一次性导入数据库(如注册信息、产品信息)
✅ 数据清洗:
用
pandas.read_csv()
读取后执行空值处理、字段替换、类型转换等操作
✅ 与 Excel 无缝协作:
Excel 可直接打开 CSV;修改后另存为 CSV,Python 程序可继续读取处理
八、总结
能力 | 工具 |
---|---|
原始读写 CSV | csv 模块(轻量、标准库) |
高效读写与分析 | pandas.read_csv / to_csv (推荐) |
核心建议:
- 小文件读写首选
csv
模块,兼容性强、无需安装第三方库 - 面向数据分析和清洗任务,建议直接使用
pandas
- 写 CSV 时要明确编码与分隔符,避免跨系统兼容问题
学会 CSV 的读写和处理,是每个 Python 开发者和数据工作者必须掌握的技能之一。未来你可能还会接触 JSON、Excel、SQL 等数据格式,它们的处理方法虽有差异,但核心思想是一致的。