轻松管理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库全解析

    背景介绍

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

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

    作者:正东AI

    物联沃分享整理
    物联沃-IOTWORD物联网 » 轻松管理CSV数据,Python csv库全解析

    发表回复