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

作者:

文章目录
  • 面向数据分析、报表生成与系统集成的日常工作,CSV 与 Excel 几乎是最常用的两种表格数据格式。本文以实战为导向,系统讲解如何在 Python 中高效、稳健地读写 CSV 和 Excel,覆盖常见坑点与性能优化策略,并给出可直接复制使用的代码示例。
  • 需要在后端或数据脚本中批量导入/导出表格数据 想提升对编码、空值、类型转换、性能的掌控 希望拥有一份可作为速查手册的实用指南
  • 标准库:csv 读写 CSV,无需安装。 主力库:pandas 处理结构化数据,CSV/Excel 通吃。 Excel 专用:openpyxl 读写 .xlsx;xlsxwriter 适合写入时的样式与大文件优化。 安装示例: pip install pandas openpyxl xlsxwriter
  • 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
  • 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)
  • 读取: 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”}, )
  • Excel 偏好 UTF-8-SIG 或本地 ANSI。为兼容 Excel,写入 CSV 时可用 utf-8-sig。 Windows 上换行符用 newline="" 交由 csv 控制,避免出现空行。 含中文数据建议统一使用 utf-8 或 utf-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”)
  • 使用 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()
  • 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”)
  • 使用 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=False 或 keep_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: 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=True 与 iter_rows。 避免不必要的类型推断与解析,显式传入 dtype、usecols。 写入 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 分隔符可能不是逗号,注意使用 sep 或 delimiter。 字段中包含逗号或换行时需使用引号,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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 使用Python处理CSV文件的全面指南 Python高效处理CSV、Excel和JSON数据的实战指南 Python处理CSV文件与Excel文件的技巧分享 Python利用pandas处理CSV文件的用法示例 使用Python自动化处理Excel表格的操作方法 Python处理大量Excel文件的十个技巧分享 10个Python办公自动化案例总结
  • 目录
    • 前言
    • 适用读者与目标
    • 库选型与安装
    • 读取 CSV(标准库 csv)
    • 写入 CSV(标准库 csv)
    • 使用 pandas 读写 CSV
    • 编码与本地化要点(Windows/Excel 友好)
    • 读取 Excel(.xlsx)
    • 写入 Excel 与多工作表
    • 样式、公式与格式(Excel)
    • 类型、缺失值与前导零
    • CSV ↔ Excel 转换
    • 大文件与性能优化
    • 常见坑点与规避
    • 迷你速查
    • 结语

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

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

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

    安装示例:

    pip install pandas openpyxl xlsxwriter
    

    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
    

    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)
    

    读取:

    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"},
    )
    

    • 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")
    

    使用 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()
    

    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")
    

    使用 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:

    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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 使用Python处理CSV文件的全面指南
    • Python高效处理CSV、Excel和JSON数据的实战指南
    • Python处理CSV文件与Excel文件的技巧分享
    • Python利用pandas处理CSV文件的用法示例
    • 使用Python自动化处理Excel表格的操作方法
    • Python处理大量Excel文件的十个技巧分享
    • 10个Python办公自动化案例总结

    站内搜索