本文要点
reader 会把每一行返回成一个字符串列表
DictReader 会把每一行映射成字典
我们写到新文件 output.csv

本文目录
CSV文件与编码准备
这篇笔记只处理最基础的 CSV 读写场景:一个自建的 demo.csv,内容为两行:
name,age
Alice,30我们只用到 csv 模块里的 reader、DictReader、writer 三个基础用法,以及打开文件时的 newline='' 和 encoding='utf-8'。不涉及方言注册、Sniffer、QUOTE_NONNUMERIC 或其它高级参数。
开始前请先确认:demo.csv 是你自己新建的样例文件,不要拿重要数据直接做实验。如果文件里已有你需要的真实内容,先复制一份备份,再在副本上练习。下面的操作只针对这个自建示例文件,不会删除文件,也不会修改系统设置。
读写CSV的操作方法
1. 新建样例文件 demo.csv。
在练习目录里新建一个文本文件,命名为 demo.csv,写入两行内容:
name,age
Alice,30第一行是表头,第二行是数据。保存时选择 UTF-8 编码。
2. 用 csv.reader 读取。
reader 会把每一行返回成一个字符串列表,不做自动类型转换。
import csv
with open('demo.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)这里 newline='' 是官方建议的打开方式:如果不写,引号字段里嵌入的换行可能无法被正确解释,在写入时某些平台还会多出一个 \r。encoding='utf-8' 则明确告诉 Python 按 UTF-8 解码,避免默认编码不一致带来的乱码。
3. 用 csv.DictReader 读取,按表头取字段。
DictReader 会把每一行映射成字典,键来自第一行表头。
import csv
with open('demo.csv', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['name'], row['age'])因为 demo.csv 第一行是 name,age,所以可以直接用 row['name'] 和 row['age'] 取值。如果创建 DictReader 时传入了 fieldnames 参数,那么第一行也会被当作数据行处理;不传时,第一行用作字段名并从结果中省略。
4. 用 csv.writer 写入另一个新文件。
为了避免覆盖 demo.csv,我们写到新文件 output.csv。
import csv
rows = [
['name', 'age'],
['Alice', '30'],
]
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(rows)writer 会把数据转换成带分隔符的字符串。写入时同样使用 newline='' 和 encoding='utf-8'。非字符串数据在写入前会用 str() 转换;None 会被写成空字符串。
5. 检查结果。
打开 output.csv,应能看到与 demo.csv 相同结构的两行内容。整个过程只新建和写入 output.csv,没有覆盖 demo.csv。
换行和表头问题
问:为什么打开文件要写 newline=''?
答:csv 模块自己处理换行。官方说明指出,如果不指定 newline='',引号字段内部的换行不会被正确解释,在写入时使用 \r\n 行尾的平台上还会多出一个 \r。指定它通常是安全的。
问:encoding='utf-8' 是不是必须的?
答:本示例文件按 UTF-8 保存,所以读取和写入都显式指定 encoding='utf-8'。实际文件的编码必须与指定值匹配;不要依赖未指定 encoding 时的默认行为。
问:reader 读出来的 age 是数字还是字符串?
答:是字符串。reader 不做自动类型转换,除非使用 QUOTE_NONNUMERIC 这类格式选项,而本文不展开这些高级参数。需要数字时请自己转换。
问:DictReader 和 reader 有什么区别?
答:reader 每行返回列表,DictReader 每行返回字典,键由表头决定,取值时更直观。
问:writer 会不会覆盖原文件?
答:会覆盖你指定的那个文件。所以本文把结果写到 output.csv,而不是 demo.csv。
操作限制与数据保护
1. 练习前先备份。如果 demo.csv 里有你不想丢失的内容,先复制一份再操作。
2. 只操作自建示例文件。不要对系统文件或重要数据文件执行写入、覆盖或删除操作。
3. 写入时使用 'w' 模式会清空目标文件原有内容。请确认目标文件名是新的,例如 output.csv。
4. 读写都建议同时写 newline='' 和 encoding='utf-8',这是官方示例中推荐的做法。
5. reader 返回的每个字段都是字符串,需要数值时自行转换。
6. 本文只覆盖 reader、DictReader、writer 的基础用法,不涉及方言注册、Sniffer、QUOTE_NONNUMERIC 等高级内容。
观看知识要点视频 18 秒
18秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。
参考资料
以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。
请结合原始资料的适用条件阅读。
返回表格与数据 →