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
相关推荐
紫丁香3 小时前
03-Flask请求上下文响应与错误处理机制深度解析
后端·python·flask
云霄IT3 小时前
安卓apk逆向之crc32检测打补丁包crc32_patcher.py
java·前端·python
极光代码工作室3 小时前
基于深度学习的中文文本情感分析系统
人工智能·python·深度学习·神经网络·nlp
龙侠九重天3 小时前
使用 OpenClaw 进行数据分析和可视化
大数据·人工智能·python·ai·信息可视化·数据分析·openclaw
敏编程3 小时前
一天一个Python库:soupsieve - CSS 选择器在 Beautiful Soup 中的力量
开发语言·css·python
kronos.荒3 小时前
图论之腐烂橘子_BFS(python)
python·图论·bfs
月亮!3 小时前
6大AI测试工具极限压测:微软TuringAI竟率先崩溃
java·人工智能·python·测试工具·microsoft·云原生·压力测试
YJlio3 小时前
《Windows 11 从入门到精通》读书笔记 1.4.9:全新的微软应用商店——“库 + 多设备同步”把它从鸡肋变成刚需入口
c语言·网络·python·数码相机·microsoft·ios·iphone
郝学胜-神的一滴3 小时前
Pytorch张量核心运算精讲:从类型转换到数值操作全解析
开发语言·人工智能·pytorch·python·深度学习·程序人生·机器学习