csv(Python CSV)

发布于:2025-06-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

Python CSV 模块使用教程

CSV(Comma Separated Values)格式是用于数据存储的一种简单、广泛使用的文件格式,尤其常见于电子表格、数据库和数据分析中。Python 提供了一个 csv 模块,可以方便地处理 CSV 文件的读写操作。无论是读取、写入简单的文本数据,还是处理复杂的 CSV 格式,csv 模块都能够提供强大的支持。

本文将介绍如何使用 Python 的 csv 模块进行 CSV 文件的读写操作,包括基本操作、格式化以及更高级的应用。

# 导入 Python csv 模块
import csv

1. csv.reader - 读取 CSV 文件

示例数据(read.csv):

name,age,city
张珊,19,北京
李思,20,上海
王武,21,广州
赵柳,22,深圳

Python 代码:

# 打开 CSV 文件并使用 csv.reader 读取
with open('read.csv', mode='r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)  # 创建 reader 对象
    for row in csv_reader:
        print(row)

输出结果:

['name', 'age', 'city']
['张珊', '19', '北京']
['李思', '20', '上海']
['王武', '21', '广州']
['赵柳', '22', '深圳']

2. csv.writer - 写入 CSV 文件

Python 代码:

data = [
    ['Name', 'Age', 'Sex'],
    ['熊大', 20, '男'],
    ['熊二', 18, '男'],
]

# 创建 CSV 文件并写入数据
with open('writer.csv', 'w', newline='', encoding='utf-8') as csvfile:
    csv_writer = csv.writer(csvfile)  # 创建 writer 对象
    csv_writer.writerows(data)  # 写入数据

生成文件(writer.csv):

Name,Age,Sex
熊大,20,男
熊二,18,男

3. csv.register_dialect - 注册 CSV 方言

Python 代码:

# 注册一个自定义的CSV方言
csv.register_dialect(
    'custom_dialect',           # 命名所注册的自定义方言
     delimiter=';',             # 设置字段之间的分隔符为分号
     quotechar='"',             # 设置引用字符为双引号
     quoting=csv.QUOTE_MINIMAL  # 设置引用方式为最小化引用,只在必要时引用字段
)

data = [
    ['Name', 'Age', 'Sex'],
    ['熊大', 20, '男'],
    ['熊二', 18, '男'],
]

# 使用新注册的变种写入 CSV
with open('dialect.csv', 'w', newline='', encoding='utf-8') as csvfile:
    # 创建一个CSV写入器,使用之前注册的自定义方言
    csv_writer = csv.writer(csvfile, dialect='custom_dialect')
    csv_writer.writerows(data)  # 写入数据

生成文件(dialect.csv):

Name;Age;Sex
熊大;20;男
熊二;18;男

4. csv.unregister_dialect - 取消注册 CSV 方言

Python 代码:

# 取消已注册的变种 custom_dialect
csv.unregister_dialect('custom_dialect')

5. csv.get_dialect - 获取已注册的方言

Python 代码:

# 获取并打印某个变种的详细信息
dialect = csv.get_dialect('custom_dialect')
print(f"分隔符: {dialect.delimiter}\n引号字符: {dialect.quotechar}")

输出结果:

分隔符: ;
引号字符: "

6. csv.list_dialects - 列出所有注册的方言

Python 代码:

# 获取所有可用的 CSV 变种
print(csv.list_dialects())

输出结果:

['excel', 'excel-tab', 'unix', 'custom', 'custom_dialect']

7. csv.field_size_limit - 设置/获取最大字段大小

Python 代码:

# 获取当前的字段大小限制
print("默认最大字段大小:", csv.field_size_limit())

# 修改字段大小限制
csv.field_size_limit(100000)
print("新设置的最大字段大小:", csv.field_size_limit())

输出结果:

默认最大字段大小: 131072
新设置的最大字段大小: 100000

8. csv.DictReader - 以字典形式读取 CSV 文件

示例数据(read.csv):

name,age,city
张珊,19,北京
李思,20,上海
王武,21,广州
赵柳,22,深圳

Python 代码:

# 读取 CSV 并以字典格式解析
with open('read.csv', newline='', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row)

输出结果:

{'name': '张珊', 'age': '19', 'city': '北京'}
{'name': '李思', 'age': '20', 'city': '上海'}
{'name': '王武', 'age': '21', 'city': '广州'}
{'name': '赵柳', 'age': '22', 'city': '深圳'}

9. csv.DictWriter - 以字典形式写入 CSV 文件

Python 代码:

# 定义字段名和数据
data = [
    {'name': '汤姆', 'type': '猫', 'colour': 'blue'},
    {'name': '杰瑞', 'type': '鼠', 'colour': 'yellow'}
]

# 写入 CSV 文件
with open('dict_writer.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['name', 'type', 'colour']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    # 写入表头
    writer.writeheader()

    # 循环写入数据
    for row in data:
        writer.writerow(row)

生成文件(dict_writer.csv):

name,type,colour
汤姆,猫,blue
杰瑞,鼠,yellow

10. csv.Dialect - 定义CSV文件格式

Python 代码:

# 自定义方言
class MyDialect(csv.Dialect):
    delimiter = '|'  # 分隔符为竖线
    quotechar = '"'  # 引号字符为双引号
    doublequote = True  # 双引号转义
    lineterminator = '\n'  # 行终止符为换行符
    quoting = csv.QUOTE_MINIMAL  # 引用风格为最小化引用

csv.register_dialect('my_dialect', MyDialect)  # 将自定义的 CSV 方言注册为 'my_dialect'

data = [
    ['Name', 'Age', 'Sex'],
    ['熊大', 20, '男'],
    ['熊二', 18, '男'],
]

# 打开文件进行写入
with open('my_dialect.csv', 'w', newline='', encoding='utf-8') as csvfile:
    # 创建一个CSV写入器,使用之前注册的自定义方言
    csv_writer = csv.writer(csvfile, dialect='custom_dialect')
    csv_writer.writerows(data)  # 写入数据

生成文件(my_dialect.csv):

Name;Age;Sex
熊大;20;男
熊二;18;男

11. csv.Sniffer - 自动检测 CSV 格式

示例数据(read.csv):

name,age,city
张珊,19,北京
李思,20,上海
王武,21,广州
赵柳,22,深圳

Python 代码:

with open('read.csv', newline='', encoding='utf-8') as csvfile:
    sample = csvfile.read(1024)  # 读取部分内容进行分析
    sniffer = csv.Sniffer()
    dialect = sniffer.sniff(sample)
    print(f"检测到的分隔符: {dialect.delimiter}")

输出结果:

检测到的分隔符: ,

网站公告

今日签到

点亮在社区的每一天
去签到