0Pricing
Python Academy · 课时

使用 csv.reader 读取 CSV

逐行读取 CSV 文件,并按索引访问列。

使用 csv.reader 读取 CSV 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

简介

Python 的 csv 模块处理 CSV 文件的复杂细节:带引号的字段、分隔符和不同的换行符。

打开 CSV 文件

with open('data.csv', newline='') as f: 是推荐写法——newline='' 可让 csv 模块处理换行符。
import csv, io
sample = 'name,age,city\nAlice,30,NYC\nBob,25,LA'
reader = csv.reader(io.StringIO(sample))
for row in reader:
    print(row)

csv.reader 基础

csv.reader(f) 返回行迭代器,其中每一行都是字符串列表。
import csv, io
data = 'a,b,c\n1,2,3\n4,5,6'
for row in csv.reader(io.StringIO(data)):
    print(row)

跳过标题行

next(reader) 会跳过标题行。或者使用 csv.DictReader 按名称访问列。
import csv, io
data = 'name,age\nAlice,30\nBob,25'
reader = csv.reader(io.StringIO(data))
header = next(reader)  # skip
for row in reader:
    print(row)

自定义分隔符

csv.reader(f, delimiter=';') 会读取以分号分隔的文件。它适用于任意单字符分隔符。
import csv, io
data = 'a;b;c\n1;2;3'
for row in csv.reader(io.StringIO(data), delimiter=';'):
    print(row)

处理带引号的字段

csv.reader 会自动处理带引号的字段:'Alice, Jr.' 会作为一个字段保留。
import csv, io
data = 'name,note\n"Smith, John","great guy"'
for row in csv.reader(io.StringIO(data)):
    print(row)

csv.DictReader

DictReader 使用标题行作为键,将每一行映射为 OrderedDict(在 3.8 及更高版本中也可以是普通字典)。
import csv, io
data = 'name,age\nAlice,30\nBob,25'
for row in csv.DictReader(io.StringIO(data)):
    print(row['name'], row['age'])

类型转换

CSV 值始终是字符串。请显式转换:int(row['age'])、float(row['price'])。
import csv, io
data = 'item,price\napple,1.5\nbanana,0.75'
for row in csv.DictReader(io.StringIO(data)):
    print(row['item'], float(row['price'])*2)

处理编码

open(file, encoding='utf-8-sig') 可以处理 UTF-8 BOM(Excel 生成的 CSV 中很常见)。
# with open('data.csv', encoding='utf-8-sig', newline='') as f:
#     reader = csv.DictReader(f)
print('encoding demo')

大型 CSV 文件

csv.reader 采用惰性读取——一次读取一行。不需要将整个文件加载到内存中。
import csv, io
data = '\n'.join(f'{i},{i*2}' for i in range(1000))
reader = csv.reader(io.StringIO(data))
print(sum(int(row[0]) for row in reader))

检测方言

csv.Sniffer().sniff(sample) 会自动检测分隔符和引号样式。
import csv, io
data = 'a|b|c\n1|2|3'
sniff = csv.Sniffer().sniff(data[:100])
print('delimiter:', sniff.delimiter)
for row in csv.reader(io.StringIO(data), dialect=sniff):
    print(row)

快速检查

使用 open() 打开 CSV 文件时,应始终设置哪个参数?

回顾

csv.reader:将行读取为字符串列表。DictReader:将行读取为字典。始终使用 newline='' 打开文件。处理 Excel 文件时注意编码。显式转换类型。

继续学习

请继续努力!进入下一课。

常见问题解答

「使用 csv.reader 读取 CSV」课时是免费的吗?

是的 — 「使用 csv.reader 读取 CSV」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「使用 csv.reader 读取 CSV」这节课中我会学到什么?

逐行读取 CSV 文件,并按索引访问列。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 csv.reader 读取 CSV」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. JSON 编码与解码
  2. 处理嵌套 JSON 结构
  3. 使用 csv.reader 读取 CSV
  4. 使用 csv.DictWriter 写入 CSV
← 返回 Python Academy