Python CSV模块全面解析

Python csv 模块详解

csv 模块是 Python 标准库中用于读写 CSV(Comma-Separated Values)文件的工具,支持多种格式的 CSV 数据解析。以下内容涵盖基础用法、高级配置及常见问题解决方案,并附带代码示例。

读取 CSV 文件

使用 csv.reader 读取 CSV 文件,默认按行分割数据:

import csv

with open('data.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)  # 每行返回一个列表

若 CSV 文件包含标题行,可通过 csv.DictReader 按字典访问数据:

with open('data.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row['column_name'])  # 通过列名访问

写入 CSV 文件

使用 csv.writer 写入数据,支持列表或元组格式:

data = [['Name', 'Age'], ['Alice', 24], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # 写入多行

若需字典数据写入,使用 csv.DictWriter,并指定字段名:

fieldnames = ['Name', 'Age']
data = [{'Name': 'Alice', 'Age': 24}, {'Name': 'Bob', 'Age': 30}]

with open('output.csv', 'w', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # 写入标题行
    writer.writerows(data)

自定义分隔符与引号

CSV 文件可能使用非逗号分隔符(如制表符 \t),通过 delimiter 参数指定:

with open('data.tsv', 'r') as file:
    reader = csv.reader(file, delimiter='\t')
    for row in reader:
        print(row)

处理包含特殊字符的字段时,可通过 quoting 参数控制引号行为:

with open('data.csv', 'w', newline='') as file:
    writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC)  # 非数字字段加引号
    writer.writerow(['Text', 100, 'More "text"'])

处理编码问题

若 CSV 文件包含非 ASCII 字符(如中文),需指定编码格式(如 utf-8):

with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

错误处理与大型文件

读取大型 CSV 文件时,建议逐行处理以避免内存不足:

with open('large_data.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        process_row(row)  # 自定义处理函数

若文件格式不规范,可通过 error_bad_lines 跳过错误行(需 pandas 配合):

import pandas as pd
try:
    df = pd.read_csv('data.csv', error_bad_lines=False)
except Exception as e:
    print(f"Error: {e}")

总结

csv 模块提供了灵活的 CSV 数据读写功能,适用于从简单数据导出到复杂格式解析的场景。通过调整分隔符、引号规则和编码,可适配多种数据源需求。对于更复杂的数据操作(如筛选、聚合),建议结合 pandas 库使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值