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 参数即可。

笔记加载中…