python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python读写旧版Excel文件

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

作者:小庄-Python办公

在数据处理的世界里,Excel 是最常见的文件格式之一,本教程将手把手教你如何使用 Python 系统化、专业地读写 .xls 文件,有需要的小伙伴可以了解下

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

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

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

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

注意:目前流行的 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 文件往往比较复杂。以下是一些常用的参数配置:

# 读取名为 "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 格式的物理限制。

解决:

2. 库的混淆 (xlrd vs openpyxl)

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

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

解决:

3. 编码问题

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

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

5. 总结与建议

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

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

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

您可能感兴趣的文章:
阅读全文