当前位置: 首页 > news >正文

【Python办公】处理 CSV和Excel 文件操作指南

目录

    • 前言
    • 适用读者与目标
    • 库选型与安装
    • 读取 CSV(标准库 csv)
    • 写入 CSV(标准库 csv)
    • 使用 pandas 读写 CSV
    • 编码与本地化要点(Windows/Excel 友好)
    • 读取 Excel(.xlsx)
    • 写入 Excel 与多工作表
    • 样式、公式与格式(Excel)
    • 类型、缺失值与前导零
    • CSV ↔ Excel 转换
    • 大文件与性能优化
    • 常见坑点与规避
    • 迷你速查
    • 结语

专栏导读
  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
  • 🏳️‍🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
  • 🏳️‍🌈 Github主页:请点击——> Github主页 求Star⭐
  • 🏳️‍🌈 知乎主页:请点击——> 知乎主页 求关注
  • 🏳️‍🌈 CSDN博客主页:请点击——> CSDN的博客主页 求关注
  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • ❤️ 欢迎各位佬关注! ❤️

前言

面向数据分析、报表生成与系统集成的日常工作,CSV 与 Excel 几乎是最常用的两种表格数据格式。本文以实战为导向,系统讲解如何在 Python 中高效、稳健地读写 CSV 和 Excel,覆盖常见坑点与性能优化策略,并给出可直接复制使用的代码示例。

适用读者与目标

  • 需要在后端或数据脚本中批量导入/导出表格数据
  • 想提升对编码、空值、类型转换、性能的掌控
  • 希望拥有一份可作为速查手册的实用指南

库选型与安装

  • 标准库:csv 读写 CSV,无需安装。
  • 主力库:pandas 处理结构化数据,CSV/Excel 通吃。
  • Excel 专用:openpyxl 读写 .xlsxxlsxwriter 适合写入时的样式与大文件优化。

安装示例:

pip install pandas openpyxl xlsxwriter

读取 CSV(标准库 csv)

import csv
from pathlib import Pathpath = Path("data.csv")with path.open("r", encoding="utf-8") as f:reader = csv.reader(f)for row in reader:pass

使用字典形式更便于字段访问:

import csv
from pathlib import Pathwith Path("data.csv").open("r", encoding="utf-8") as f:reader = csv.DictReader(f)for record in reader:pass

写入 CSV(标准库 csv)

import csv
from pathlib import Pathrows = [["id", "name", "score"], [1, "张三", 95]]with Path("out.csv").open("w", encoding="utf-8", newline="") as f:writer = csv.writer(f)for row in rows:writer.writerow(row)

写入带表头的字典:

import csv
from pathlib import Pathrecords = [{"id": 1, "name": "张三", "score": 95},{"id": 2, "name": "李四", "score": 88},
]fieldnames = ["id", "name", "score"]with Path("out_dict.csv").open("w", encoding="utf-8", newline="") as f:writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writeheader()writer.writerows(records)

使用 pandas 读写 CSV

读取:

import pandas as pddf = pd.read_csv("data.csv", encoding="utf-8")

写入:

df.to_csv("out.csv", index=False, encoding="utf-8")

逐块读取大文件:

import pandas as pdfor chunk in pd.read_csv("big.csv", chunksize=100_000):pass

只读部分列并指定类型:

import pandas as pddf = pd.read_csv("data.csv",usecols=["id", "name", "score"],dtype={"id": "Int64", "name": "string", "score": "float64"},
)

编码与本地化要点(Windows/Excel 友好)

  • Excel 偏好 UTF-8-SIG 或本地 ANSI。为兼容 Excel,写入 CSV 时可用 utf-8-sig
  • Windows 上换行符用 newline="" 交由 csv 控制,避免出现空行。
  • 含中文数据建议统一使用 utf-8utf-8-sig

示例:

import csv
from pathlib import Pathwith Path("excel_friendly.csv").open("w", encoding="utf-8-sig", newline="") as f:writer = csv.writer(f)writer.writerow(["编号", "姓名", "备注"]) 

pandas 侧:

import pandas as pddf = pd.DataFrame({"编号": [1, 2], "姓名": ["张三", "李四"]})
df.to_csv("excel_friendly.csv", index=False, encoding="utf-8-sig")

读取 Excel(.xlsx)

使用 pandas:

import pandas as pddf = pd.read_excel("workbook.xlsx", sheet_name=0, engine="openpyxl")

指定列与类型:

import pandas as pddf = pd.read_excel("workbook.xlsx",sheet_name="Sheet1",usecols=["id", "name", "score"],dtype={"id": "Int64", "name": "string", "score": "float64"},engine="openpyxl",
)

使用 openpyxl 原生读取:

from openpyxl import load_workbookwb = load_workbook("workbook.xlsx", read_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True):pass
wb.close()

写入 Excel 与多工作表

pandas 写入多个工作表:

import pandas as pdwith pd.ExcelWriter("report.xlsx", engine="xlsxwriter") as writer:df1 = pd.DataFrame({"id": [1, 2], "name": ["张三", "李四"]})df2 = pd.DataFrame({"id": [3, 4], "name": ["王五", "赵六"]})df1.to_excel(writer, sheet_name="用户A", index=False)df2.to_excel(writer, sheet_name="用户B", index=False)

openpyxl 创建并写入:

from openpyxl import Workbookwb = Workbook()
ws = wb.active
ws.title = "数据"
ws.append(["id", "name", "score"])
ws.append([1, "张三", 95])
wb.save("simple.xlsx")

样式、公式与格式(Excel)

使用 xlsxwriter 设置样式:

import pandas as pdwith pd.ExcelWriter("styled.xlsx", engine="xlsxwriter") as writer:df = pd.DataFrame({"金额": [1234.5, 6789.01]})df.to_excel(writer, sheet_name="Sheet1", index=False)workbook  = writer.bookworksheet = writer.sheets["Sheet1"]fmt = workbook.add_format({"num_format": "#,##0.00", "bold": True})worksheet.set_column("A:A", 12, fmt)

插入公式(openpyxl):

from openpyxl import Workbook
from openpyxl.utils import get_column_letterwb = Workbook()
ws = wb.active
ws.append(["单价", "数量", "总价"])
ws.append([10, 2, None])
ws["C2"] = "=A2*B2"
wb.save("formula.xlsx")

类型、缺失值与前导零

  • 账单号、电话号码等标识码使用字符串类型,避免前导零丢失。
  • pandas 读写时可指定 dtype=str 或使用 converters 保留格式。
  • 缺失值处理可使用 na_filter=Falsekeep_default_na=False

示例:

import pandas as pddf = pd.read_csv("ids.csv",dtype={"bill_no": "string", "phone": "string"},keep_default_na=False,
)

CSV ↔ Excel 转换

CSV 转 Excel:

import pandas as pddf = pd.read_csv("data.csv")
df.to_excel("data.xlsx", index=False)

Excel 转 CSV:

import pandas as pddf = pd.read_excel("data.xlsx", engine="openpyxl")
df.to_csv("data.csv", index=False, encoding="utf-8")

多工作表合并读取:

import pandas as pdxls = pd.ExcelFile("book.xlsx", engine="openpyxl")
frames = [xls.parse(name) for name in xls.sheet_names]
merged = pd.concat(frames, ignore_index=True)

大文件与性能优化

  • 流式读取:pandas chunksize,openpyxl read_only=Trueiter_rows
  • 避免不必要的类型推断与解析,显式传入 dtypeusecols
  • 写入 Excel 时使用 xlsxwriter,速度更优,内存占用更稳。
  • pandas 2.x 可尝试 engine="pyarrow" 读取 CSV 以提升解析速度。

示例:

import pandas as pdfor chunk in pd.read_csv("big.csv", chunksize=200_000):pass

openpyxl 写入大文件:

from openpyxl import Workbookwb = Workbook(write_only=True)
ws = wb.create_sheet("数据")
for i in range(1_000_000):ws.append([i, f"name_{i}"])
wb.save("big.xlsx")

常见坑点与规避

  • Excel 的最大行数约 1048576,超出需拆分或改用 CSV。
  • Excel 可能将长数字自动格式化为科学计数法,读写时统一为字符串类型。
  • CSV 分隔符可能不是逗号,注意使用 sepdelimiter
  • 字段中包含逗号或换行时需使用引号,pandas 自动处理,标准库需配置 quotechar
  • Windows 上若出现 CSV 空行,检查写入文件是否设置 newline=""

迷你速查

  • 读 CSV:pd.read_csv("file.csv")
  • 写 CSV:df.to_csv("file.csv", index=False)
  • 读 Excel:pd.read_excel("file.xlsx", engine="openpyxl")
  • 写 Excel:pd.ExcelWriter("file.xlsx", engine="xlsxwriter")
  • 兼容 Excel 的 CSV 编码:encoding="utf-8-sig"
  • 大文件分块:pd.read_csv(..., chunksize=...)
  • 指定列与类型:usecols=...dtype=...

结语

掌握 CSV 与 Excel 的读写不仅是数据工程的基本功,更是提升系统集成与数据流转效率的关键。将本文的示例与策略纳入你的项目骨架,可以显著降低编码与格式问题带来的不确定性,并在大数据量场景下获得稳定的性能表现。

结尾
  • 希望对初学者有帮助;致力于办公自动化的小小程序员一枚
  • 希望能得到大家的【❤️一个免费关注❤️】感谢!
  • 求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

http://www.dtcms.com/a/609453.html

相关文章:

  • Unity Shader Graph 3D 实例 - 一个简单的3D打印效果
  • ReAct 框架实现(基于langgraph)
  • 流媒体,包含哪些技术?Zynq MP方案
  • 网站支持ipv6做哪些改造app公司网站模板
  • 怎么做刷东西的网站网址免费全自动推广平台
  • 校园墙|校园社区|基于Java+vue的校园墙小程序系统(源码+数据库+文档)
  • Linux/宝塔上没有ssl证书的站点使用https访问会跳转的其他有ssl证书网站
  • Centos环境中Django项目中gunicorn的配置和使用
  • LangGraph系列:多智能体终极方案,ReAct+MCP工业级供应链系统
  • 移动端 HTTPS 抓包实战,多工具组合分析与高效排查指南
  • 自动化测试工具Parasoft C/C++test如何导入IAR项目
  • 蓝桥杯嵌入式赛道—-软件篇(GPIO输出模式配置)
  • 仿第四城地方门户网站模板python可以做网站吗
  • ToDesk如何充当分屏显示器?扩展屏、多屏结合虚拟屏都可行!
  • qKnow 知识平台开源版 v1.0.3 发布:Docker Compose 部署 多项稳定性优化和关键问题修复
  • 【Prompt学习技能树地图】检索增强生成(RAG)核心技术剖析与实践指南
  • Zookeeper在Kafka中的作用
  • MySQL数据表操作
  • 访问外国网站速度慢怎样优化标题关键词
  • 《VScode搭建教程(附安装包)--- 开启你的编程之旅》
  • MFC Edit Control控件完全指南:从基础使用到高级定制
  • C语言编译器安装教程 | 快速上手C语言编译环境的配置与调试
  • C库OpenSSL安装与VisualStudio配置
  • ppt模板免费下载网站不需要登录网页设计的三大基本技术
  • 什么是营销型网站?h5可以连接别的网站吗
  • Android13修改系统支持gps同步时间
  • Webpack到Vite:构建工具迁移实战经验总结
  • QT音乐播放器18----新歌速递播放、隐藏顶部和底部工具栏、自定义ToolTips
  • 工控一体机在超声波清洗机中的应用
  • Qt5配置MSVC2017