Python3 csv 模块
CSV(逗号分隔值)是一种用逗号分隔字段的纯文本表格格式,Excel 表格、数据库导出、数据分析等场景常用它交换数据。Python 内置的 csv 模块帮你规范读写 CSV,自动处理引号与换行,不必手动 split。
CSV 的样子
第一行通常是表头,之后每行是一条记录,字段间用逗号分隔:
name,age,city
张三,25,北京
李四,30,上海
csv.writer 写入文件
writerow 写一行,writerows 一次写多行;newline='' 防止 Windows 下写入出现空行:
import csv
with open('users.csv', 'w', encoding='utf-8', newline='') as f:
w = csv.writer(f)
w.writerow(['name', 'age', 'city']) # 写表头
w.writerows([['张三', 25, '北京'], ['李四', 30, '上海']])
csv.reader 读取文件
reader 把每一行变成列表,按索引取字段:
import csv
with open('users.csv', 'r', encoding='utf-8', newline='') as f:
rows = csv.reader(f)
for row in rows:
print(row)
# 输出:
# ['name', 'age', 'city']
# ['张三', '25', '北京']
# ['李四', '30', '上海']
DictReader 与 DictWriter
字段较多时用字典方式更直观:DictReader 把每行转成字典(键为表头),DictWriter 按字段名写字典:
import csv
with open('users.csv', 'r', encoding='utf-8', newline='') as f:
for row in csv.DictReader(f):
print(row['name'], row['age']) # 按表头名取列
# 输出:
# 张三 25
# 李四 30
import csv
with open('out.csv', 'w', encoding='utf-8', newline='') as f:
w = csv.DictWriter(f, fieldnames=['name', 'age', 'city'])
w.writeheader() # 自动写表头
w.writerow({'name': '王五', 'age': 28, 'city': '广州'})
delimiter 自定义分隔符
CSV 不一定是逗号分隔:制表符、分号分隔的文件只需指定 delimiter 即可正确解析:
import csv
with open('data.tsv', 'r', encoding='utf-8', newline='') as f:
rows = csv.reader(f, delimiter='\t') # 制表符分隔
for row in rows:
print(row)
示例:读取并导出筛选结果
把年龄大于 25 的记录过滤出来,写入新文件:
import csv
with open('users.csv', 'r', encoding='utf-8', newline='') as f:
rows = [r for r in csv.DictReader(f) if int(r['age']) > 25]
with open('filtered.csv', 'w', encoding='utf-8', newline='') as f:
w = csv.DictWriter(f, fieldnames=['name', 'age', 'city'])
w.writeheader()
w.writerows(rows) # 只写出符合条件的记录
小结
csv 模块读写套路统一:with open(..., newline='') 打开文件,再包上 reader/writer 或 DictReader/DictWriter;遇到非逗号分隔的数据补一个 delimiter 参数即可。