Base Tools-Associate-Second:CSV库详解

第一归属:CSV(Comma-Separated Values)

csv 是 Python 内置的标准库,它解决了手动处理 CSV 时的诸多坑(比如字段包含逗号、换行符、引号等特殊情况),无需额外安装,是处理表格类文本数据的首选工具,专门用于处理 CSV(逗号分隔值)格式的文件

一、核心功能与基础用法

读取 CSV 文件

csv提供 csv.reader()csv.DictReader() 两种读取方式,后者更易用(按列名取值)

示例 1:基础读取(csv.reader)

python 复制代码
import csv

# 读取 CSV 文件(假设 test.csv 内容如下)
# 姓名,年龄,城市
# 张三,25,北京
# 李四,30,上海
# 王五,28,广州

# 方式1:csv.reader(返回列表形式的行)
with open('test.csv', 'r', encoding='utf-8') as f:
    # 创建 reader 对象
    reader = csv.reader(f)
    # 获取表头(第一行)
    header = next(reader)
    print("表头:", header)  # 输出:表头: ['姓名', '年龄', '城市']
    
    # 遍历每一行数据
    for row in reader:
        # row 是列表,通过索引取值
        name = row[0]
        age = row[1]
        city = row[2]
        print(f"姓名:{name},年龄:{age},城市:{city}")

示例 2:字典形式读取(csv.DictReader,推荐)

python 复制代码
import csv

with open('test.csv', 'r', encoding='utf-8') as f:
    # 创建 DictReader 对象,自动将第一行作为键
    reader = csv.DictReader(f)
    
    # 遍历每一行(行是字典,按列名取值)
    for row in reader:
        name = row['姓名']
        age = row['年龄']
        city = row['城市']
        print(f"姓名:{name},年龄:{age},城市:{city}")

写入 CSV 文件

对应csv.writer()csv.DictWriter() 两种写入方式

示例 1:基础写入(csv.writer)

python 复制代码
import csv

# 要写入的数据
data = [
    ['姓名', '年龄', '城市'],
    ['赵六', 32, '深圳'],
    ['孙七', 27, '杭州']
]

# 写入 CSV 文件(newline='' 避免每行多空行)
with open('output.csv', 'w', encoding='utf-8', newline='') as f:
    # 创建 writer 对象
    writer = csv.writer(f)
    # 写入单行(表头)
    writer.writerow(data[0])
    # 写入多行(数据)
    writer.writerows(data[1:])

示例 2:字典形式写入(csv.DictWriter,推荐)

python 复制代码
import csv

# 表头(键名)
fieldnames = ['姓名', '年龄', '城市']
# 要写入的数据(字典列表)
data = [
    {'姓名': '周八', '年龄': 29, '城市': '成都'},
    {'姓名': '吴九', '年龄': 31, '城市': '重庆'}
]

with open('output_dict.csv', 'w', encoding='utf-8', newline='') as f:
    # 创建 DictWriter 对象,指定表头
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    # 先写入表头
    writer.writeheader()
    # 写入多行数据
    writer.writerows(data)

二、进阶用法:处理特殊场景

自定义分隔符(如制表符 \t、分号;)

CSV 不一定用逗号分隔,比如欧洲常用分号,可通过 delimiter 参数指定

python 复制代码
import csv

# 读取分号分隔的 CSV
with open('semicolon.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        print(row)

# 写入制表符分隔的 CSV
with open('tab_sep.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(['姓名', '年龄', '城市'])
    writer.writerow(['郑十', 26, '南京'])

处理带引号的字段

CSV 中如果字段包含逗号 / 换行符,会用引号包裹,csv 库会自动处理

python 复制代码
import csv

# 写入带特殊字符的字段
data = [
    ['姓名', '描述'],
    ['钱十一', '爱好:读书,跑步\n职业:程序员']  # 包含逗号和换行符
]

with open('quote_test.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_ALL)  # 所有字段加引号
    writer.writerows(data)

# 读取验证(自动解析引号内的特殊字符)
with open('quote_test.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row[1])  # 输出完整的描述,包含逗号和换行符

quoting 参数可选值:

  • csv.QUOTE_ALL:所有字段加引号
  • csv.QUOTE_MINIMAL:仅特殊字段(含分隔符 / 换行符)加引号(默认)
  • csv.QUOTE_NONNUMERIC:非数字字段加引号
  • csv.QUOTE_NONE:不加引号

读取 / 写入时转换数据类型

csv 读取的所有字段默认是字符串,可手动转换

python 复制代码
import csv

with open('test.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 将年龄从字符串转为整数
        age = int(row['年龄'])
        print(f"{row['姓名']} 的年龄是 {age}(类型:{type(age)})")

三、常见坑与注意事项

  1. 编码问题 :中文 CSV 建议用 encoding='utf-8',如果读取乱码,可尝试 gbk/gb2312(Windows 生成的 CSV 常用)
  2. newline='' :写入时必须加 newline='',否则 Windows 系统下每行之间会多出一个空行
  3. 空值处理csv 库读取空字段会返回空字符串 '',需自行判断处理(比如转为 None
  4. 大文件处理csv 库是逐行读取 / 写入,内存占用低,适合处理大 CSV 文件(无需一次性加载全部数据)

总结

  1. csv 是 Python 内置库,无需安装,专门处理 CSV 文件,能自动处理特殊字符(逗号、引号、换行符)
  2. 核心用法分两类:reader/writer(列表形式)和 DictReader/DictWriter(字典形式,推荐,按列名取值更直观)
  3. 关键参数:delimiter 自定义分隔符、quoting 控制引号规则、写入时加 newline='' 避免空行,中文文件指定 encoding='utf-8'gbk
相关推荐
二宝哥4 小时前
14.Python模块与包完全指南:从定义到实战
python
三声三视5 小时前
交互式用够了?用 Agent SDK 把 Claude 塞进 Python Web 服务
人工智能·python·ai·aigc·ai编程
zhanghaha13145 小时前
Python语言基础:4_数据类型转换
java·前端·python
larance5 小时前
机器学习特征预处理之标准化/归一化
开发语言·python·机器学习
tokenova5 小时前
Python 多模型统一调用封装类,一套代码兼容 GPT/Claude/Grok
python
Patrick在香港6 小时前
Python实战:用数据分析拆解一场AI大会——WAIC 2026参展企业画像、议题演变与城市格局
人工智能·python·数据挖掘·数据分析·ai编程
weixin_471383037 小时前
01Python基础
python
小猴子爱上树7 小时前
TikTok Shop视频自动翻译工具实战教程
人工智能·python·音视频·机器翻译
神奇霸王龙7 小时前
可审计 Agent 对比:5 旗舰步骤回放
网络·图像处理·人工智能·python·ai·ai编程
humbinal7 小时前
同时支持 gui & cli 的 parquet 文件查看工具,高性能小清新!
hive·python·rust·spark·开源·github·parquet