Python csv模块:轻松读写CSV文件

01-14 6159阅读

在数据处理的世界里,CSV(Comma-Separated Values)文件是一种常见且重要的数据存储格式。Python 提供了强大的 csv 模块,让我们能够轻松地读写 CSV 文件。本文将详细介绍如何使用 csv 模块进行文件操作。

一、读取 CSV 文件

1. 简单读取

使用 csv.reader 函数可以逐行读取 CSV 文件。假设我们有一个名为 data.csv 的文件,内容如下:

姓名,年龄,城市
张三,25,北京
李四,30,上海

读取代码如下:

import csv

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

上述代码中,with open 语句确保文件在使用后正确关闭。csv.reader 创建了一个读取器对象,通过遍历 reader 可以逐行获取文件内容,每一行都是一个列表。

2. 按字典方式读取

如果希望以字典形式读取,方便通过列名访问数据,可以使用 csv.DictReader

import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row['姓名'], row['年龄'], row['城市'])

csv.DictReader 会将每一行数据转换为字典,键为 CSV 文件的列名。

二、写入 CSV 文件

1. 简单写入

使用 csv.writer 函数写入数据。假设我们要创建一个新的 CSV 文件 new_data.csv 并写入数据:

import csv

data = [
    ['姓名', '年龄', '城市'],
    ['王五', 28, '广州'],
    ['赵六', 32, '深圳']
]

with open('new_data.csv', 'w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

newline='' 参数在写入时很重要,它可以避免在 Windows 系统下出现额外的空行。writer.writerow 方法用于写入一行数据。

2. 按字典方式写入

如果数据是字典形式,使用 csv.DictWriter 更方便。

import csv

data = [
    {'姓名': '孙七', '年龄': 35, '城市': '成都'},
    {'姓名': '周八', '年龄': 22, '城市': '杭州'}
]

fieldnames = ['姓名', '年龄', '城市']

with open('another_data.csv', 'w', encoding='utf-8', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # 写入表头
    for row in data:
        writer.writerow(row)

fieldnames 指定了 CSV 文件的列名,writeheader 方法写入表头,writerow 写入字典数据。

三、处理复杂情况

1. 处理不同分隔符

默认情况下 CSV 使用逗号作为分隔符,但如果文件使用其他分隔符(如制表符 \t),可以在读取和写入时指定 delimiter 参数。

读取制表符分隔的文件:

import csv

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

写入制表符分隔的文件:

import csv

data = [
    ['姓名', '年龄', '城市'],
    ['吴九', 40, '南京']
]

with open('tab_output.csv', 'w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file, delimiter='\t')
    for row in data:
        writer.writerow(row)

2. 处理引号和转义

如果 CSV 文件中的字段包含特殊字符(如逗号、引号),csv 模块会自动处理引号转义。例如,字段值 "hello, world" 会被正确读取和写入。

总结与建议

Python 的 csv 模块为我们提供了简洁高效的 CSV 文件读写方式。在实际应用中:

  • 读取时,根据数据访问需求选择 csv.reader(列表形式)或 csv.DictReader(字典形式)。
  • 写入时,同样根据数据结构选择 csv.writercsv.DictWriter,注意 newline='' 参数的使用。
  • 遇到特殊分隔符或包含特殊字符的字段,灵活设置 delimiter 等参数。

通过熟练掌握 csv 模块,我们能够轻松应对各种 CSV 文件处理任务,无论是简单的数据导入导出,还是复杂的数据清洗和转换,都能游刃有余。建议在实际项目中多进行实践,加深对模块功能的理解和运用能力。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

Music