通过Python读写CSV文件的入门教程

 更新时间:2026年01月26日 09:07:00   作者:Eiceblue  
这篇文章主要介绍了如何使用FreeSpire.XLSforPython库来处理CSV文件,包括读取、写入、以及处理复杂场景,文章还提供了一些常见问题的解决方案,如中文乱码处理和大文件读写优化,需要的朋友可以参考下

在数据处理、数据分析和自动化办公场景中,CSV(逗号分隔值)文件是最常用的数据交换格式之一。Python 作为数据处理的主流语言,原生提供了csv模块处理CSV文件,但面对复杂场景(如大文件、CSV 与 Excel 格式互转、特殊字符处理)时,原生模块往往需要大量额外封装。

本文将介绍如何使用 Free Spire.XLS for Python 库实现 CSV 文件的读取、写入操作。开始前先通过 pip 安装该免费库:

pip install Spire.Xls.Free

相比标准库 csv,它的核心优势在于:

  1. 更简洁的 API - 减少代码复杂度
  2. 更强兼容性 – 自动处理编码,原生支持中文、特殊字符
  3. 多格式支持 - CSV、Excel、PDF 等格式的互转

1. 通过 Python 读取CSV文件

1.1 基础读取:读取整份CSV文件

以下示例展示如何读取CSV文件的所有数据,包括表头和内容,并打印输出:

from spire.xls import *

def read_csv_file(file_path):
    # 创建Workbook对象
    workbook = Workbook()
    # 加载CSV文件
    workbook.LoadFromFile(file_path, ",", 1, 1)
    
    # 获取第一个工作表(CSV文件加载后默认生成一个工作表)
    worksheet = workbook.Worksheets[0]
    
    # 获取工作表的行数和列数
    row_count = worksheet.LastRow
    col_count = worksheet.LastColumn
    
    # 遍历所有单元格并打印数据
    print("CSV文件内容:")
    for row in range(1, row_count + 1):
        row_data = []
        for col in range(1, col_count + 1):
            cell_value = worksheet.Range[row, col].Text
            row_data.append(cell_value)
        print("\t".join(row_data))
    
    # 释放资源
    workbook.Dispose()

# 调用函数读取CSV文件
if __name__ == "__main__":
    csv_file_path = "sales_data.csv"  # 替换为你的CSV文件路径
    read_csv_file(csv_file_path)

读取结果:

1.2 进阶读取:按条件筛选数据

实际场景中常需筛选特定行/列数据,例如读取“销售额>1000”的行:

from spire.xls import *

def read_csv_with_filter(file_path):
    workbook = Workbook()
    workbook.LoadFromFile(file_path, ",", 1, 1)
    worksheet = workbook.Worksheets[0]
    
    row_count = worksheet.LastRow
    col_count = worksheet.LastColumn
    
    # 假设第3列是销售额(数值型),筛选销售额>1000的行
    print("销售额>1000的记录:")
    # 跳过表头(第一行)
    for row in range(2, row_count + 1):
        # 获取销售额单元格的值并转换为浮点数
        sales_value = float(worksheet.Range[row, 3].Text)
        if sales_value > 1000:
            row_data = []
            for col in range(1, col_count + 1):
                row_data.append(worksheet.Range[row, col].Text)
            print("\t".join(row_data))
    
    workbook.Dispose()

if __name__ == "__main__":
    read_csv_with_filter("sales_data.csv")

按条件读取结果:

2. 通过 Python 写入 CSV 文件

2.1 基础写入:创建并写入 CSV 文件

以下示例展示如何创建新的 CSV 文件,并写入表头和多行数据:

from spire.xls import *

def write_csv_file(file_path):
    # 创建Workbook对象
    workbook = Workbook()
    # 移除默认的工作表,创建新工作表
    workbook.Worksheets.Clear()
    worksheet = workbook.Worksheets.Add("CSV_Data")
    
    # 定义表头和数据
    header = ["姓名", "部门", "薪资", "入职时间"]
    data = [
        ["张三", "销售部", "15000", "2023-01-10"],
        ["李四", "技术部", "12000", "2023-03-15"],
        ["王五", "市场部", "8000", "2022-11-20"]
    ]
    
    # 写入表头
    for col in range(len(header)):
        worksheet.Range[1, col + 1].Text = header[col]
    
    # 写入数据
    for row in range(len(data)):
        for col in range(len(data[row])):
            worksheet.Range[row + 2, col + 1].Text = data[row][col]
    
    # 保存为CSV文件(指定编码为UTF-8,避免中文乱码)
    worksheet.SaveToFile(file_path, ",", Encoding.get_UTF8())
    
    # 释放资源
    workbook.Dispose()
    print(f"CSV文件已成功写入:{file_path}")

if __name__ == "__main__":
    write_csv_file("employee_data.csv")

生成的 CSV 文件:

2.2 进阶写入:追加数据到已有 CSV 文件

若需在已有 CSV 文件末尾追加数据,可先读取原有数据,再写入新数据:

from spire.xls import *

def append_to_csv(file_path, new_data):
    # 加载已有CSV文件
    workbook = Workbook()
    workbook.LoadFromFile(file_path, ",", 1, 1)
    worksheet = workbook.Worksheets[0]
    
    # 获取已有数据的最后一行
    last_row = worksheet.LastRow
    
    # 追加新数据
    for row in range(len(new_data)):
        for col in range(len(new_data[row])):
            worksheet.Range[last_row + row + 1, col + 1].Text = new_data[row][col]
    
    # 保存到新CSV文件
    worksheet.SaveToFile("new_employee_data.csv", ",", Encoding.get_UTF8())
    workbook.Dispose()

if __name__ == "__main__":
    # 要追加的新数据
    new_data = [
        ["赵六", "财务部", "9000", "2023-05-01"],
        ["孙七", "行政部", "7500", "2023-02-28"]
    ]
    append_to_csv("employee_data.csv", new_data)

数据追加结果:

3. 常见问题与解决方案

  • 中文乱码问题:保存时指定Encoding.get_UTF8(),避免默认编码导致的乱码;
  • 大文件读写卡顿:可使用worksheet.ExportDataTable()将数据转为DataTable,分片处理;
  • CSV分隔符非逗号:加载/保存时指定分隔符(如制表符\t、分号;),示例:workbook.LoadFromFile(file_path, ";", 1, 1)。

4. 总结

Free Spire.XLS for Python 是处理 CSV 文件的高效工具:

  1. 读取 CSV 的核心步骤是:创建 Workbook → 加载文件 → 遍历工作表单元格;
  2. 写入/追加 CSV 的核心步骤是:创建/加载工作表 → 写入数据 → 指定编码保存为 CSV 格式。

通过本文的示例,你可以快速掌握基于 Python 的 CSV 文件读取与写入技巧,满足日常数据处理、自动化办公等场景的需求。相比原生模块,该库的面向对象API更易维护,且能无缝对接 Excel 格式,是 Python 数据处理的优质选择。

以上就是通过Python读写CSV文件的入门教程的详细内容,更多关于Python读写CSV文件的资料请关注脚本之家其它相关文章!

相关文章

  • Django框架验证码用法实例分析

    Django框架验证码用法实例分析

    这篇文章主要介绍了Django框架验证码用法,结合实例形式分析了Python Django框架验证码的功能、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Python随机生成迷宫游戏的代码示例

    Python随机生成迷宫游戏的代码示例

    本文主要介绍了Python随机生成迷宫游戏的代码示例,Python可以通过生成二维数组模拟迷宫的结构,使用深度优先搜索和广度优先搜索等算法找到通路,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • python的socket编程入门

    python的socket编程入门

    本篇文章是一篇关于python的socket编程入门教程,如果你也正好需要这方面的内容,学习下吧。
    2018-01-01
  • Python列表推导式的使用方法

    Python列表推导式的使用方法

    这篇文章主要介绍了Python列表推导式的使用方法,大家参考使用吧
    2013-11-11
  • 使用python装饰器验证配置文件示例

    使用python装饰器验证配置文件示例

    项目中用到了一个WriteData的函数保存用户填写的配置,为了实现验证用户输入的需求,在不影响接口的使用的前提下,采用了python的装饰器实现,代码片段演示了如何验证WriteData函数的输入参数
    2014-02-02
  • Python Matplotlib中使用plt.savefig存储图片的方法举例

    Python Matplotlib中使用plt.savefig存储图片的方法举例

    pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,将图像的像素指定一定的维度,下面这篇文章主要给大家介绍了关于Python Matplotlib中使用plt.savefig存储图片的相关资料,需要的朋友可以参考下
    2023-02-02
  • 模型训练时GPU利用率太低的原因及解决

    模型训练时GPU利用率太低的原因及解决

    这篇文章主要介绍了模型训练时GPU利用率太低的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 详解Python中 sys.argv[]的用法简明解释

    详解Python中 sys.argv[]的用法简明解释

    本篇文章主要介绍了详解Python中 sys.argv[]的用法简明解释,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 一个不可思议的Python库vnpy示例详解

    一个不可思议的Python库vnpy示例详解

    这篇文章主要给大家介绍了关于Python库vnpy的相关资料,vn.py是一个开源的Python交易编程框架,支持多种金融产品的交易,提供全流程支持,它具有模块化设计、多语言支持、跨平台、高性能、易用性、社区支持和文档齐全等特性,需要的朋友可以参考下
    2024-11-11
  • NetWorkX使用方法及nx.draw()相关参数解读

    NetWorkX使用方法及nx.draw()相关参数解读

    这篇文章主要介绍了NetWorkX使用方法及nx.draw()相关参数解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论