苦练Python第62天:零基础玩转CSV文件读写,csv模块实战

前言

大家好,我是倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。点赞、收藏、关注,一键三连!

欢迎来到苦练Python第62天

今天我们来学习Python标准库中的csv模块。

一、CSV 是什么?能做什么?

CSV(Comma-Separated Values,逗号分隔值)是一种纯文本表格格式。

  • 每行是一条记录(record),行内每个字段(field)用分隔符(通常是逗号)隔开。
  • 结构简单、体积小、兼容性强,几乎所有电子表格、数据库、数据分析工具都支持。

常见场景

  1. Excel / WPS / Google Sheets 导出或导入数据
  2. MySQL、PostgreSQL 等数据库批量导入导出
  3. 机器学习数据集(如 Kaggle 的 .csv 文件)
  4. 日志、传感器、爬虫抓取的中间结果

Python 自带的 csv 模块(import csv)让我们不用关心各种方言差异,就能安全地读写 CSV。


二、写 CSV ------ 把内存数据变成文件

2.1 用列表写入:writer.writerow / writer.writerows

python 复制代码
# 示例:把成绩表写入 scores.csv
import csv

header = ['姓名', '语文', '数学', '英语']
rows = [
    ['张三', 90, 85, 88],
    ['李四', 78, 92, 87],
    ['王五', 95, 91, 93]
]

with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(header)    # 写表头
    writer.writerows(rows)     # 写多行

运行后得到文件 scores.csv

复制代码
姓名,语文,数学,英语
张三,90,85,88
李四,78,92,87
王五,95,91,93

2.2 用字典写入:DictWriter(自动对齐字段)

python 复制代码
# 示例:把订单写入 orders.csv
import csv

fieldnames = ['订单号', '商品', '单价', '数量']
orders = [
    {'订单号': 1001, '商品': 'Python 入门', '单价': 59, '数量': 2},
    {'订单号': 1002, '商品': 'Python 进阶', '单价': 79, '数量': 1}
]

with open('orders.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(orders)

文件内容:

yaml 复制代码
订单号,商品,单价,数量
1001,Python 入门,59,2
1002,Python 进阶,79,1

三、读 CSV ------ 把文件读回内存

3.1 按列表读取:csv.reader

python 复制代码
# 读取刚才生成的 scores.csv
import csv

with open('scores.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

输出:

css 复制代码
['姓名', '语文', '数学', '英语']
['张三', '90', '85', '88']
['李四', '78', '92', '87']
['王五', '95', '91', '93']

注意:读出来默认是字符串,需要自行转换类型。


3.2 按字典读取:csv.DictReader(字段名做键)

python 复制代码
# 读取 orders.csv
import csv

with open('orders.csv', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['商品'], '共', int(row['数量']) * int(row['单价']), '元')

输出:

复制代码
Python 入门 共 118 元
Python 进阶 共 79 元

四、自定义方言:处理"奇怪"的 CSV

有时分隔符不是逗号,而是 Tab、分号,甚至管道符 |;或者字段里本身包含分隔符,需要特殊引号。

通过 csv.register_dialect 可以"注册"一种新方言,后续直接引用名字即可。

python 复制代码
# 写入以分号分隔、单引号包围的 csv
import csv

csv.register_dialect('semicolon', delimiter=';', quotechar="'", quoting=csv.QUOTE_MINIMAL)

data = [["Tom;Jerry", 100], ["Spike", 90]]

with open('pets.csv', 'w', newline='') as f:
    writer = csv.writer(f, dialect='semicolon')
    writer.writerow(['主人', '分数'])
    writer.writerows(data)

# 读取同样使用方言
with open('pets.csv', newline='') as f:
    reader = csv.reader(f, dialect='semicolon')
    for row in reader:
        print(row)

输出:

css 复制代码
['主人', '分数']
["Tom;Jerry", '100']
['Spike', '90']

五、自动检测方言:Sniffer 一键猜格式

拿到一个未知格式的 CSV,可以用 csv.Sniffer 自动推断分隔符、引号规则。

python 复制代码
# 假设我们拿到 example.csv,但不知道分隔符
import csv

raw = '''name|age|city
Alice|30|Beijing
Bob|25|Shanghai'''

with open('example.csv', 'w', encoding='utf-8') as f:
    f.write(raw)

with open('example.csv', newline='') as f:
    sample = f.read(1024)
    f.seek(0)
    dialect = csv.Sniffer().sniff(sample, delimiters='|,\t;')
    reader = csv.reader(f, dialect=dialect)
    for row in reader:
        print(row)

输出:

css 复制代码
['name', 'age', 'city']
['Alice', '30', 'Beijing']
['Bob', '25', 'Shanghai']

六、完整实战:统计销售总额

把上面所有知识点串起来------

  1. 读入 orders.csv
  2. 计算每个订单金额
  3. 把结果写入 summary.csv
python 复制代码
import csv

# 1. 读
total = 0
summary_rows = []

with open('orders.csv', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        price = int(row['单价'])
        qty   = int(row['数量'])
        sub   = price * qty
        total += sub
        summary_rows.append([row['订单号'], row['商品'], sub])

# 2. 写
with open('summary.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['订单号', '商品', '金额'])
    writer.writerows(summary_rows)
    writer.writerow(['', '总计', total])

print('已生成 summary.csv,总销售额:', total)

运行后 summary.csv

yaml 复制代码
订单号,商品,金额
1001,Python 入门,118
1002,Python 进阶,79
,总计,197

七、小结与下一步

  • csv.writer / csv.DictWriter:把列表或字典写文件
  • csv.reader / csv.DictReader:把文件读回列表或字典
  • Dialect / Sniffer:处理各种分隔符、引号、转义规则

最后感谢阅读!欢迎关注我,微信公众号:倔强青铜三

欢迎点赞、收藏、关注,一键三连!!

相关推荐
火山引擎开发者社区20 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_9269783320 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q4639134921 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.21 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
XLYcmy21 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
虎头金猫21 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
从零开始学习人工智能21 小时前
WSL2部署CUDA12+cuDNN9踩坑实录:ONNX Runtime GPU推理环境搭建全流程
python
wujian831121 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
m0_3807438721 小时前
从零调用 Claude 教程
开发语言·python·node.js
黄敬峰21 小时前
一文搞懂 NestJS 后端框架:工厂模式、模块化与装饰器
面试