侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day23 - Python读写CSV文件

2026-4-24 / 0 评论 / 2 阅读

CSV 文件读写

CSV 概述

CSV(Comma Separated Values):纯文本表格数据,逗号分隔,每行一条记录。广泛用于数据导入导出、跨系统数据交换。

标准库 csv 模块

写入 CSV

import csv

names = ['Alice', 'Bob', 'Charlie']
scores = [[92, 88, 95], [78, 82, 90], [85, 91, 87]]

with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['姓名', '语文', '数学', '英语'])  # 表头
    for name, score in zip(names, scores):
        writer.writerow([name] + score)

自定义分隔符:

writer = csv.writer(f, delimiter='|', quoting=csv.QUOTE_ALL)  # 用 | 分隔,全部加引号

读取 CSV

import csv

with open('scores.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)  # ['姓名', '语文', '数学', '英语']

用字典方式读写

import csv

# 写入(更清晰,可指定字段)
with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
    fieldnames = ['姓名', '语文', '数学', '英语']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'姓名': 'Alice', '语文': 92, '数学': 88, '英语': 95})
    writer.writerow({'姓名': 'Bob', '语文': 78, '数学': 82, '英语': 90})

# 读取
with open('scores.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['姓名'], row['数学'])  # 按列名访问

pandas 读写 CSV(推荐)

数据分析推荐使用 pandas,功能更强大:

pip install pandas
import pandas as pd

# 读取
df = pd.read_csv('scores.csv')
print(df['姓名'])
print(df.describe())

# 写入
df.to_csv('output.csv', index=False, encoding='utf-8-sig')

常用参数:

参数 说明
index=False 不写入行索引列
encoding='utf-8-sig' 避免 Excel 打开乱码
usecols=[...] 只读取指定列

总结

  • csv.writer/csv.reader:基础读写,适合简单场景
  • csv.DictWriter/csv.DictReader:按字典读写,代码更清晰
  • pandas.read_csv/to_csv:数据分析首选,功能丰富
  • 写入 CSV 时建议加 newline='',避免行间距问题