Python csv模块:轻松读写CSV文件
在数据处理的世界里,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.writer或csv.DictWriter,注意newline=''参数的使用。 - 遇到特殊分隔符或包含特殊字符的字段,灵活设置
delimiter等参数。
通过熟练掌握 csv 模块,我们能够轻松应对各种 CSV 文件处理任务,无论是简单的数据导入导出,还是复杂的数据清洗和转换,都能游刃有余。建议在实际项目中多进行实践,加深对模块功能的理解和运用能力。

