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

作者:倔强青铜三 VIP.1 初学乍练日期:2025/10/11

前言

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

欢迎来到苦练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

1# 示例:把成绩表写入 scores.csv
2import csv
3
4header = ['姓名', '语文', '数学', '英语']
5rows = [
6    ['张三', 90, 85, 88],
7    ['李四', 78, 92, 87],
8    ['王五', 95, 91, 93]
9]
10
11with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
12    writer = csv.writer(f)
13    writer.writerow(header)    # 写表头
14    writer.writerows(rows)     # 写多行
15

运行后得到文件 scores.csv

1姓名,语文,数学,英语
2张三,90,85,88
3李四,78,92,87
4王五,95,91,93
5

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

1# 示例:把订单写入 orders.csv
2import csv
3
4fieldnames = ['订单号', '商品', '单价', '数量']
5orders = [
6    {'订单号': 1001, '商品': 'Python 入门', '单价': 59, '数量': 2},
7    {'订单号': 1002, '商品': 'Python 进阶', '单价': 79, '数量': 1}
8]
9
10with open('orders.csv', 'w', newline='', encoding='utf-8') as f:
11    writer = csv.DictWriter(f, fieldnames=fieldnames)
12    writer.writeheader()
13    writer.writerows(orders)
14

文件内容:

1订单号,商品,单价,数量
21001,Python 入门,59,2
31002,Python 进阶,79,1
4

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

3.1 按列表读取:csv.reader

1# 读取刚才生成的 scores.csv
2import csv
3
4with open('scores.csv', newline='', encoding='utf-8') as f:
5    reader = csv.reader(f)
6    for row in reader:
7        print(row)
8

输出:

1['姓名', '语文', '数学', '英语']
2['张三', '90', '85', '88']
3['李四', '78', '92', '87']
4['王五', '95', '91', '93']
5

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


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

1# 读取 orders.csv
2import csv
3
4with open('orders.csv', newline='', encoding='utf-8') as f:
5    reader = csv.DictReader(f)
6    for row in reader:
7        print(row['商品'], '共', int(row['数量']) * int(row['单价']), '元')
8

输出:

1Python 入门 共 118 元
2Python 进阶 共 79 元
3

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

有时分隔符不是逗号,而是 Tab、分号,甚至管道符 |;或者字段里本身包含分隔符,需要特殊引号。
通过 csv.register_dialect 可以“注册”一种新方言,后续直接引用名字即可。

1# 写入以分号分隔、单引号包围的 csv
2import csv
3
4csv.register_dialect('semicolon', delimiter=';', quotechar="'", quoting=csv.QUOTE_MINIMAL)
5
6data = [["Tom;Jerry", 100], ["Spike", 90]]
7
8with open('pets.csv', 'w', newline='') as f:
9    writer = csv.writer(f, dialect='semicolon')
10    writer.writerow(['主人', '分数'])
11    writer.writerows(data)
12
13# 读取同样使用方言
14with open('pets.csv', newline='') as f:
15    reader = csv.reader(f, dialect='semicolon')
16    for row in reader:
17        print(row)
18

输出:

1['主人', '分数']
2["Tom;Jerry", '100']
3['Spike', '90']
4

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

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

1# 假设我们拿到 example.csv,但不知道分隔符
2import csv
3
4raw = '''name|age|city
5Alice|30|Beijing
6Bob|25|Shanghai'''
7
8with open('example.csv', 'w', encoding='utf-8') as f:
9    f.write(raw)
10
11with open('example.csv', newline='') as f:
12    sample = f.read(1024)
13    f.seek(0)
14    dialect = csv.Sniffer().sniff(sample, delimiters='|,\t;')
15    reader = csv.reader(f, dialect=dialect)
16    for row in reader:
17        print(row)
18

输出:

1['name', 'age', 'city']
2['Alice', '30', 'Beijing']
3['Bob', '25', 'Shanghai']
4

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

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

  1. 读入 orders.csv
  2. 计算每个订单金额
  3. 把结果写入 summary.csv
1import csv
2
3# 1. 读
4total = 0
5summary_rows = []
6
7with open('orders.csv', newline='', encoding='utf-8') as f:
8    reader = csv.DictReader(f)
9    for row in reader:
10        price = int(row['单价'])
11        qty   = int(row['数量'])
12        sub   = price * qty
13        total += sub
14        summary_rows.append([row['订单号'], row['商品'], sub])
15
16# 2. 写
17with open('summary.csv', 'w', newline='', encoding='utf-8') as f:
18    writer = csv.writer(f)
19    writer.writerow(['订单号', '商品', '金额'])
20    writer.writerows(summary_rows)
21    writer.writerow(['', '总计', total])
22
23print('已生成 summary.csv,总销售额:', total)
24

运行后 summary.csv

1订单号,商品,金额
21001,Python 入门,118
31002,Python 进阶,79
4,总计,197
5

七、小结与下一步

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

最后感谢阅读!欢迎关注我,微信公众号:倔强青铜三
欢迎点赞、收藏、关注,一键三连!!


苦练Python第62天:零基础玩转CSV文件读写,csv模块实战​》 是转载文章,点击查看原文


相关推荐


某大厂跳动面试:计算机网络相关问题解析与总结
360_go_php2025/10/10

​ 在参加像字节跳动这样的互联网公司面试时,计算机网络的知识是一个常见的考察点。以下是一些常见的计算机网络面试问题和详细解答,在面试中打下坚实的基础。 1. HTTPS通信过程 HTTPS (HyperText Transfer Protocol Secure) 是一种安全的 HTTP 协议,通过 TLS/SSL 加密实现数据的保密性和完整性。HTTPS 的通信过程包括以下几个步骤:​编辑 客户端发起连接:客户端向服务器发送请求,使用 HTTPS 协议。 服务器响应:服务器返回其 SSL/T


CentOS安装Jenkins
何中应2025/10/8

说明:之前介绍过用 Docker 的方式部署 Jenkins,本文介绍通过安装包的方式部署最新版的 Jenkins 在云服务器上安装Jenkins 第一步:准备工作 安装 Jenkins 的前提,是需要服务器有 JDK、Maven 和 Git 环境,如下: 这几个环境,参看上面的文章进行安装,最新版的 Jenkins 需要 JDK17 或 JDK21,Maven 最好装 3+ 第二步:安装启动 找一个合适的目录,下载 Jenkins 安装包 wget https://mirro


Vue 组件与插件的区别详解
excel2025/10/7

在 Vue 的开发体系中,“组件 (Component)” 与 “插件 (Plugin)” 是两个经常被提及的概念。它们都能提升开发效率与系统可维护性,但用途与设计目标截然不同。本文将通过定义、作用、实现方式与使用场景等方面,对两者进行系统梳理与对比。 一、组件是什么? 1. 定义回顾 组件是一种将图形或非图形的逻辑抽象为独立单元的开发模式。在 Vue 中,每一个 .vue 文件都可以被视为一个组件。 简单来说,组件就是一个具有独立逻辑与界面的可复用模块。 2. 组件的优势 降低系统耦合度


Python 的内置函数 ascii
IMPYLH2025/10/5

Python 内建函数列表 > Python 的内置函数 ascii ascii()函数是Python提供的一个小巧但强大的工具,它能够将任何对象转换为只包含ASCII字符的表示形式,非ASCII字符会被转义。这个函数在调试、日志记录、数据序列化等场景中特别有用,尤其是在需要确保输出只包含可打印ASCII字符的环境中。 ascii 的函数原型: def ascii(obj): ''' 转换为字符串(调用对象的 `__repr__` 方法),非 ASCII 字符将被转义


资深面试题之MySQL问题及解答(二)
360_go_php2025/10/4

​ MySQL 是一款广泛使用的开源数据库管理系统,其提供了许多强大的功能,如事务管理、索引优化以及高级查询支持等。在面试中,面试官通常会通过一些高级 MySQL 问题来测试候选人对数据库管理、性能优化、事务隔离等方面的理解。以下是一些常见的 MySQL 资深面试问题及其解答。 ​编辑--- 21. MySQL 里记录货币用什么字段类型好? 在 MySQL 中,记录货币类型的数据建议使用 DECIMAL 或 NUMERIC 类型。DECIMAL 类型用于存储精确的数字,特别是对于涉及小数的货币数


Elasticsearch MCP 服务器:与你的 Index 聊天如何在 Linux,MacOS 及 Windows 上进行安装 ElasticsearchKibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana
Elastic 中国社区官方博客2025/10/3

访问外部知识在提升 LLM 响应能力的现代 AI 工作流中起着关键作用。但高效管理 context、确保 AI agents 之间的通信,以及扩展工具以协同工作并非易事。这就是 Model Context Protocol (MCP) 的作用所在。 Model Context Protocol 是一个开放标准,使开发者能够在他们的数据源和 AI 驱动的工具之间建立安全的双向连接。其架构非常直接:开发者可以通过 MCP servers 暴露他们的数据,或者构建连接这些服务器的 AI 应用(MCP


线程池
karry_k2025/10/2

线程池 线程池就是一种池化技术,用于预先创建并管理一组线程,避免频繁创建和销毁线程的开销,提高性能和响应速度。 他的几个关键配置包括:核心线程、最大线程数、空闲存活时间、工作队列、拒绝策略 五大线程池、七个参数、四个拒绝策略 线程池相关参数解释 corePoolSize:核心线程数,即线程池中始终保持的线程数量。 maximumPoolSize:最大线程数,即线程池中允许的最大线程数量。 keepAliveTime:线程空闲时间,超过这个时间的非核心线程会被销毁。 workQueue:任务队列


Java四舍五入的艺术掌握精确浮点数处理的秘密
bendan012342025/10/2

在编程过程中,浮点数的处理一直是一个棘手的问题。无论是在财务计算、科学计算,还是游戏开发中,浮点数的精度都可能对最终结果产生重要影响。而在Java编程语言中,四舍五入操作是一项非常常见的需求。如何精确地处理浮点数,避免不必要的误差呢?本文将深入探讨Java中的四舍五入技巧,帮助开发者更好地掌握浮点数的精确处理。 1. 为什么浮点数有误差? ?? 浮点数的存储方式决定了它的精度。在计算机中,浮点数通常采用IEEE 754标准进行存储,这种存储方式无法精确表示某些十进制数。这就导致了在进


如何在项目中选择使用HTTP还是WebSocket?
歪歪10010/2/2025

HTTP和WebSocket的选择取决于通信模式和业务需求。HTTP适用于客户端主动请求、低频交互的场景,如数据查询、表单提交和静态资源加载,具有简单、兼容性好的优势。WebSocket适合需要服务器主动推送、高频实时交互的应用,如聊天、实时监控和在线游戏,支持双向通信。实际项目中可混合使用,HTTP处理普通请求,WebSocket负责实时模块。决策时需考虑服务器推送需求、数据更新频率、交互模式和开发成本,灵活选用合适技术。


2026最新版Node.js下载安装及环境配置教程【保姆级教程】
城沐小巷9/30/2025

本文介绍了Node.js的安装和环境配置全过程。首先从官网下载对应系统的安装包,按照向导完成安装后测试版本确认安装成功。接着在安装目录下创建node_global和node_cache文件夹,通过npm命令配置路径。最后设置环境变量,包括创建NODE_PATH变量和修改Path变量。测试阶段通过全局安装express模块验证配置是否成功,并提供了常见错误的解决方法。全文包含详细的操作步骤和配图说明,适合Node.js初学者完成环境搭建。

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0