Python新手指南之如何读写旧版Excel(.xls)格式文件

 更新时间:2026年01月07日 08:59:35   作者:小庄-Python办公  
在数据处理的世界里,Excel 是最常见的文件格式之一,本教程将手把手教你如何使用 Python 系统化、专业地读写 .xls 文件,有需要的小伙伴可以了解下

在数据处理的世界里,Excel 是最常见的文件格式之一。虽然现在的标准是 .xlsx(基于 XML 的较新格式),但在很多传统行业、旧系统导出数据或历史文档中,我们仍然会频繁遇到 .xls 格式(Excel 97-2003 工作簿)。

对于 Python 初学者来说,处理这种“古老”的格式往往会遇到一些坑(比如现代库不支持)。本教程将手把手教你如何使用 Python 系统化、专业地读写 .xls 文件。

1. 准备工作:环境与依赖库

在开始写代码之前,我们需要理解 Python 处理 Excel 的生态系统。

  • Pandas: 这是 Python 数据分析的神器。我们将主要通过它来操作数据,因为它封装了底层的复杂操作,非常适合初学者。
  • xlrd: 这是一个专门用于读取 .xls 文件的引擎。
  • xlwt: 这是一个专门用于写入 .xls 文件的引擎。

注意:目前流行的 openpyxl 库仅支持 .xlsx 格式,不支持 .xls。因此,为了处理旧格式,我们必须安装 xlrdxlwt

安装步骤

打开你的终端(Terminal)或命令提示符(CMD),运行以下命令安装所需的库:

pip install pandas xlrd xlwt

安装完成后,我们就可以开始编写 Python 代码了。

2. 读取 .xls 文件

读取 .xls 文件最简单、最强大的方法是使用 Pandas 的 read_excel 函数。

基础读取代码

假设你有一个名为 old_data.xls 的文件,内容如下:

NameAgeCity
Alice25New York
Bob30London

以下是读取该文件的代码:

import pandas as pd

# 1. 定义文件路径
file_path = 'old_data.xls'

try:
    # 2. 读取 Excel 文件
    # Pandas 会自动调用 xlrd 引擎来处理 .xls 文件
    df = pd.read_excel(file_path)

    # 3. 打印前几行数据以检查
    print("文件读取成功!前 5 行数据如下:")
    print(df.head())

except FileNotFoundError:
    print(f"错误:找不到文件 {file_path}")
except Exception as e:
    print(f"读取过程中发生错误:{e}")

进阶读取技巧

在实际工作中,Excel 文件往往比较复杂。以下是一些常用的参数配置:

  • 指定 Sheet(工作表): 如果文件有多个 Sheet,你可以通过名字或索引指定。
  • 指定表头: 有时候第一行不是表头。
# 读取名为 "Sheet2" 的工作表,且指定第 2 行(索引为1)作为表头
df_sheet2 = pd.read_excel(file_path, sheet_name='Sheet2', header=1)

# 如果文件中没有表头,设置 header=None
df_no_header = pd.read_excel(file_path, header=None)

3. 写入 .xls 文件

将数据保存为 .xls 格式,我们需要使用 Pandas 的 to_excel 方法。Pandas 会在后台调用 xlwt 库来完成这个任务。

基础写入代码

我们将创建一个简单的数据集,并将其保存为 output.xls

import pandas as pd

# 1. 创建示例数据(字典格式)
data = {
    '员工ID': [101, 102, 103],
    '姓名': ['张三', '李四', '王五'],
    '入职年份': [2018, 2020, 2023]
}

# 2. 转换为 DataFrame
df_output = pd.DataFrame(data)

# 3. 定义输出文件名
output_file = 'report_2024.xls'

try:
    # 4. 写入文件
    # index=False 表示不把左侧的行索引号(0, 1, 2...)写入 Excel
    df_output.to_excel(output_file, index=False)
    
    print(f"成功将数据写入 {output_file}")

except Exception as e:
    print(f"写入失败:{e}")

写入多个 Sheet

如果你需要在一个 .xls 文件中写入多个工作表,需要使用 ExcelWriter 对象:

with pd.ExcelWriter('multi_sheet_report.xls', engine='xlwt') as writer:
    df_output.to_excel(writer, sheet_name='员工名单', index=False)
    df_output.to_excel(writer, sheet_name='备份数据', index=False)
    
print("多 Sheet 文件写入完成。")

4. 常见陷阱与解决方案 (Common Pitfalls)

作为初学者,处理 .xls 时最容易遇到以下问题:

1. 行数限制 (The 65,536 Row Limit)

问题: 当你试图写入超过 65,536 行数据到 .xls 文件时,程序会报错。

原因: 这是 Excel 97-2003 格式的物理限制。

解决:

  • 首选: 将文件保存为 .xlsx 格式(支持约 100 万行)。
  • 次选: 如果必须用 .xls,需要将数据拆分到多个 Sheet 或多个文件中。

2. 库的混淆 (xlrd vs openpyxl)

问题: 报错 xlrd.biffh.XLRDError: Excel xlsx file; not supported.

原因: 你试图用 xlrd 读取 .xlsx 文件,或者你的 xlrd 版本过新(2.0+ 版本移除了对 .xlsx 的支持,仅支持 .xls)。

解决:

  • 读取 .xls: 确保安装了 xlrd
  • 读取 .xlsx: 确保安装了 openpyxl

3. 编码问题

问题: 读取中文内容的 .xls 有时会出现乱码(较少见,但存在)。

解决: 虽然 Pandas 处理得很好,但如果遇到,可以在 read_excel 中尝试添加 encoding='utf-8'encoding='gbk' 参数(虽然新版 Pandas 已移除此参数,通常需检查源文件是否损坏)。

5. 总结与建议

处理旧版 Excel 文件是数据分析师的基本功。以下是本次教程的核心要点回顾:

  • 读取: 使用 pandas.read_excel('file.xls'),底层依赖 xlrd
  • 写入: 使用 df.to_excel('file.xls'),底层依赖 xlwt
  • 注意: 牢记 .xls 格式有 65536 行的行数限制。

给初学者的最终建议:除非工作环境强制要求使用 .xls,否则在生成新文件时,强烈建议使用现代的 .xlsx 格式。它体积更小、更安全、且支持更多的数据量。

到此这篇关于Python新手指南之如何读写旧版Excel(.xls)格式文件的文章就介绍到这了,更多相关Python读写旧版Excel文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现扫码工具的示例代码

    Python实现扫码工具的示例代码

    这篇文章主要介绍了Python实现扫码工具的示例代码,代码简单易懂对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • python查看模块,对象的函数方法

    python查看模块,对象的函数方法

    今天小编就为大家分享一篇python查看模块,对象的函数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 详解pandas df.iloc[]的典型用法

    详解pandas df.iloc[]的典型用法

    本文主要介绍了详解pandas df.iloc[]的典型用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 教你怎么用python实现字符串转日期

    教你怎么用python实现字符串转日期

    今天教各位小伙伴怎么用python实现字符串转日期,文中有非常详细的代码示例,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python顺序结果、选择结构和循环结构详解

    Python顺序结果、选择结构和循环结构详解

    这篇文章主要给大家介绍了关于Python顺序结果、选择结构和循环结构的相关资料, 程序由3种基本结构组成,顺序结构、分支结构和循环结构,需要的朋友可以参考下
    2023-07-07
  • Python3网络爬虫中的requests高级用法详解

    Python3网络爬虫中的requests高级用法详解

    本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。感兴趣的朋友跟随小编一起看看吧
    2019-06-06
  • 使用PyTorch实现去噪扩散模型的完整代码

    使用PyTorch实现去噪扩散模型的完整代码

    在本文中,我们将深入研究DDPM的复杂性,涵盖其训练过程,包括正向和逆向过程,并探索如何执行采样,在整个探索过程中,我们将使用PyTorch从头开始构建DDPM,并完成其完整的训练,需要的朋友可以参考下
    2024-01-01
  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    这篇文章主要介绍了使用Python中OpenCV和深度学习进行全面嵌套边缘检测,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Python 使用 raise 语句抛出异常的流程分析

    Python 使用 raise 语句抛出异常的流程分析

    在Python编程中,异常处理是至关重要的一部分,本文将探讨 Python 中 raise 语句的使用方法以及如何通过 raise 语句来抛出各种类型的异常,从而有效地进行异常处理,感兴趣的朋友跟随小编一起看看吧
    2021-02-02
  • Python requests timeout的设置

    Python requests timeout的设置

    这篇文章主要介绍了Python requests timeout的设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论