当前位置: 代码网 > it编程>前端脚本>Python > Python自动化办公之处理CSV和Excel文件的操作指南

Python自动化办公之处理CSV和Excel文件的操作指南

2025年11月17日 Python 我要评论
前言面向数据分析、报表生成与系统集成的日常工作,csv 与 excel 几乎是最常用的两种表格数据格式。本文以实战为导向,系统讲解如何在 python 中高效、稳健地读写 csv 和 excel,覆盖

前言

面向数据分析、报表生成与系统集成的日常工作,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 path

path = 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 path

with 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 path

rows = [["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 path

records = [
    {"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 pd

df = pd.read_csv("data.csv", encoding="utf-8")

写入:

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

逐块读取大文件:

import pandas as pd

for chunk in pd.read_csv("big.csv", chunksize=100_000):
    pass

只读部分列并指定类型:

import pandas as pd

df = 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 path

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

pandas 侧:

import pandas as pd

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

读取 excel(.xlsx)

使用 pandas:

import pandas as pd

df = pd.read_excel("workbook.xlsx", sheet_name=0, engine="openpyxl")

指定列与类型:

import pandas as pd

df = 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_workbook

wb = 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 pd

with 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 workbook

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

样式、公式与格式(excel)

使用 xlsxwriter 设置样式:

import pandas as pd

with 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.book
    worksheet = 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_letter

wb = 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 pd

df = pd.read_csv(
    "ids.csv",
    dtype={"bill_no": "string", "phone": "string"},
    keep_default_na=false,
)

csv ↔ excel 转换

csv 转 excel:

import pandas as pd

df = pd.read_csv("data.csv")
df.to_excel("data.xlsx", index=false)

excel 转 csv:

import pandas as pd

df = pd.read_excel("data.xlsx", engine="openpyxl")
df.to_csv("data.csv", index=false, encoding="utf-8")

多工作表合并读取:

import pandas as pd

xls = 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 pd

for chunk in pd.read_csv("big.csv", chunksize=200_000):
    pass

openpyxl 写入大文件:

from openpyxl import workbook

wb = 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自动化办公之处理csv和excel文件的操作指南的文章就介绍到这了,更多相关python处理csv和excel内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com