轻松管理CSV数据,Python csv库全解析

文章目录

  • 轻松管理CSV数据,Python csv库全解析
    • 背景介绍
    • csv库是什么?
    • 如何安装csv库?
    • 五个简单的库函数使用方法
      • 1. 读取CSV文件
      • 2. 写入CSV文件
      • 3. 使用DictReader读取CSV
      • 4. 使用DictWriter写入CSV
      • 5. 指定分隔符
    • 五个场景使用代码说明
      • 场景1:读取CSV并统计数据
      • 场景2:将查询结果写入CSV
      • 场景3:读取CSV并过滤数据
      • 场景4:读取CSV并排序数据
      • 场景5:读取CSV并合并数据
    • 常见Bug及解决方案
      • Bug1:文件未正确关闭
      • Bug2:字段数量不一致
      • Bug3:编码问题
    • 总结

轻松管理CSV数据,Python csv库全解析_第1张图片

轻松管理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.csvfile2.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]  # 假设只有两列
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e0bee1b88aac46768dc307ec62f724a0.png#pic_center)

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库都是一个不可或缺的工具。掌握它,将大大提高你的数据处理效率。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

你可能感兴趣的:(Python,python,android,数据库,Python,csv)