轻松管理CSV数据,Python csv库全解析
文章目录
轻松管理CSV数据,Python csv库全解析
背景介绍
在数据处理领域,CSV(Comma-Separated Values,逗号分隔值)文件因其简单、通用的特性而被广泛使用。无论是数据交换、存储还是备份,CSV文件都扮演着重要的角色。Python作为一门强大的编程语言,提供了一个内置的csv
库,专门用于读写CSV文件。这个库不仅功能全面,而且使用起来非常简单,是处理CSV数据的不二之选。
csv库是什么?
Python的csv
库是一个内置的标准库,它提供了一系列的工具,用于读取和写入CSV文件。这个库支持多种类型的CSV文件,包括那些使用不同分隔符和引号的文件。通过csv
库,我们可以轻松地将数据从CSV文件中读取到Python的数据结构中,或者将数据结构写入到CSV文件中。
如何安装csv库?
由于csv
是Python的标准库,因此不需要额外安装。你只需要在Python脚本中导入它即可使用:
import csv
五个简单的库函数使用方法
1. 读取CSV文件
import csv
# 打开CSV文件
with open('example.csv', 'r') as file:
# 创建一个csv.reader对象
reader = csv.reader(file)
# 逐行读取数据
for row in reader:
print(row)
这段代码会逐行打印出example.csv
文件中的内容。
2. 写入CSV文件
import csv
# 要写入的数据
rows = [['Name', 'Age'], ['Alice', 24], ['Bob', 19]]
# 打开文件,准备写入
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
# 逐行写入数据
writer.writerows(rows)
这段代码会创建一个名为output.csv
的文件,并写入rows
中的数据。
3. 使用DictReader读取CSV
import csv
# 打开CSV文件
with open('example.csv', 'r') as file:
# 创建一个csv.DictReader对象
reader = csv.DictReader(file)
# 逐行读取数据,返回字典
for row in reader:
print(row)
这段代码会将CSV文件中的每一行读取为一个字典对象,其中键是列名。
4. 使用DictWriter写入CSV
import csv
# 要写入的数据
fields = ['Name', 'Age']
data = [{'Name': 'Alice', 'Age': 24}, {'Name': 'Bob', 'Age': 19}]
# 打开文件,准备写入
with open('output.csv', 'w', newline='') as file:
writer = csv.DictWriter(file, fieldnames=fields)
# 写入列名
writer.writeheader()
# 逐行写入数据
writer.writerows(data)
这段代码会创建一个CSV文件,并使用字典列表data
中的数据写入。
5. 指定分隔符
import csv
# 要写入的数据
rows = [['Name', 'Age'], ['Alice', 24], ['Bob', 19]]
# 打开文件,准备写入
with open('output.tsv', 'w', newline='') as file:
writer = csv.writer(file, delimiter='\t')
# 逐行写入数据
writer.writerows(rows)
这段代码会创建一个使用制表符作为分隔符的TSV(Tab-Separated Values)文件。
五个场景使用代码说明
场景1:读取CSV并统计数据
import csv
# 统计每个名字出现的次数
name_count = {}
with open('people.csv', 'r') as file:
reader = csv.reader(file)
next(reader) # 跳过标题行
for row in reader:
name = row[0]
if name in name_count:
name_count[name] += 1
else:
name_count[name] = 1
print(name_count)
这段代码会读取people.csv
文件,并统计每个名字出现的次数。
场景2:将查询结果写入CSV
import csv
import sqlite3
# 连接数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
# 写入CSV
with open('users.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow([i[0] for i in cursor.description]) # 写入列名
writer.writerows(rows)
conn.close()
这段代码会从SQLite数据库中查询数据,并将其写入CSV文件。
场景3:读取CSV并过滤数据
import csv
# 过滤出年龄大于20的数据
with open('people.csv', 'r') as file:
reader = csv.reader(file)
next(reader) # 跳过标题行
for row in reader:
if int(row[1]) > 20:
print(row)
这段代码会读取people.csv
文件,并打印出年龄大于20的行。
场景4:读取CSV并排序数据
import csv
# 读取CSV并按年龄排序
with open('people.csv', 'r') as file:
reader = csv.reader(file)
header = next(reader) # 读取标题行
rows = sorted(reader, key=lambda row: int(row[1]))
# 写入新的CSV文件
with open('sorted_people.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header)
writer.writerows(rows)
这段代码会读取people.csv
文件,按年龄排序,并将结果写入sorted_people.csv
文件。
场景5:读取CSV并合并数据
import csv
# 合并两个CSV文件
with open('file1.csv', 'r') as file1, open('file2.csv', 'r') as file2:
reader1 = csv.reader(file1)
reader2 = csv.reader(file2)
rows1 = list(reader1)
rows2 = list(reader2)
# 合并数据
combined_rows = rows1 + rows2
# 写入新的CSV文件
with open('combined.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(combined_rows)
这段代码会合并两个CSV文件file1.csv
和file2.csv
,并将合并后的数据写入combined.csv
文件。
常见Bug及解决方案
Bug1:文件未正确关闭
错误信息:ResourceWarning: unclosed file
解决方案:
使用with
语句确保文件在使用后自动关闭。
with open('example.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
Bug2:字段数量不一致
错误信息:ValueError: too many values to unpack (expected 2)
解决方案:
确保每行的字段数量与标题行一致,或者使用*
操作符来处理多余的字段。
for row in reader:
name, age = row[0], row[1] # 假设只有两列

Bug3:编码问题
错误信息:UnicodeDecodeError: 'utf-8' codec can't decode
解决方案:
指定正确的编码格式打开文件。
with open('example.csv', 'r', encoding='utf-16') as file:
reader = csv.reader(file)
for row in reader:
print(row)
总结
Python的csv
库是一个功能强大且易于使用的内置库,它使得处理CSV文件变得简单快捷。通过本文的介绍,你已经了解了csv
库的基本使用方法、常见场景应用以及如何解决一些常见的问题。无论是数据导入、导出还是转换,csv
库都是一个不可或缺的工具。掌握它,将大大提高你的数据处理效率。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
作者:正东AI