下面我将为你详细介绍几种主流的 Python Excel 库,并提供处理中文乱码的完整代码示例和最佳实践。

核心问题:编码
.xlsx文件 (Office 2007 及以后版本):这是一种基于 XML 的二进制格式,内部通常使用UTF-8或UTF-16编码。读取.xlsx文件时,基本不会遇到中文乱码问题。.xls文件 (Office 2003 及以前版本):这是一种旧的二进制格式,其编码可能与系统的默认编码有关,在中文版的 Windows 系统上,它通常是GBK或GB2312编码。读取.xls文件时,中文乱码的概率很高。
使用 pandas (最推荐)
pandas 是 Python 数据分析的利器,它提供了非常简单易用的接口来处理 Excel 文件,并且能很好地处理中文。
安装
pip install pandas openpyxl
openpyxl是pandas读取.xlsx文件时需要的引擎。
读取 .xlsx 文件 (通常无需额外处理)
对于 .xlsx 文件,pandas 默认就能正确处理中文。
import pandas as pd
# 文件路径
file_path = 'data_with_chinese.xlsx'
# 使用 pandas 读取 Excel 文件
# sheet_name 可以是工作表名或索引,默认是第一个工作表 (0)
df = pd.read_excel(file_path, sheet_name='Sheet1')
# 打印前5行数据
print(df.head())
# 打印列名
print("\n列名:", df.columns.tolist())
读取 .xls 文件 (需要指定编码)
对于 .xls 文件,你需要使用 xlrd 引擎,并指定 encoding 参数为 gbk 或 gb2312。
首先安装 xlrd:

pip install xlrd
然后读取文件:
import pandas as pd # 文件路径 file_path = 'data_with_chinese.xls' # 使用 pandas 读取 Excel 文件,指定引擎为 xlrd,编码为 gbk # 如果不行,可以尝试 'gb2312' df = pd.read_excel(file_path, engine='xlrd', encoding='gbk') # 打印前5行数据 print(df.head())
使用 openpyxl (适用于 .xlsx)
如果你不想用 pandas,或者需要对 Excel 文件进行更底层的操作,openpyxl 是一个非常好的选择,它专门用于处理 .xlsx 文件。
安装
pip install openpyxl
代码示例
from openpyxl import load_workbook
# 文件路径
file_path = 'data_with_chinese.xlsx'
# 加载工作簿
# data_only=True 表示读取单元格的值而不是公式
wb = load_workbook(filename=file_path, data_only=True)
# 获取活动工作表,或者通过名字指定
# sheet = wb.active
sheet = wb['Sheet1']
# 读取第一行作为表头
headers = []
for cell in sheet[1]: # 第一行
headers.append(cell.value)
print("表头:", headers)
# 读取所有数据
data = []
for row in sheet.iter_rows(min_row=2): # 从第二行开始
row_data = []
for cell in row:
row_data.append(cell.value)
data.append(row_data)
# 打印前5行数据
for i in range(min(5, len(data))):
print(data[i])
使用 xlrd (适用于 .xls)
xlrd 是专门用于读取旧版 .xls 文件的库。
安装
pip install xlrd
代码示例
import xlrd
# 文件路径
file_path = 'data_with_chinese.xls'
# 打开工作簿,指定编码
# encoding_override='gbk' 是解决中文乱码的关键
workbook = xlrd.open_workbook(file_path, encoding_override='gbk')
# 获取第一个工作表
sheet = workbook.sheet_by_index(0)
# 读取表头
headers = sheet.row_values(0) # 第一行的值
print("表头:", headers)
# 读取所有数据
data = []
for i in range(1, sheet.nrows): # 从第二行开始遍历
row_data = sheet.row_values(i)
data.append(row_data)
# 打印前5行数据
for i in range(min(5, len(data))):
print(data[i])
最佳实践与总结
| 场景 | 推荐库 | 关键代码/参数 | 备注 |
|---|---|---|---|
.xlsx 文件 |
pandas |
df = pd.read_excel('file.xlsx') |
最简单,推荐首选。openpyxl 也可以,但代码稍复杂。 |
.xls 文件 |
pandas + xlrd |
df = pd.read_excel('file.xls', engine='xlrd', encoding='gbk') |
pandas 封装得很好,推荐使用。encoding 是关键。 |
复杂 .xlsx 操作 |
openpyxl |
wb = load_workbook('file.xlsx') |
如果需要修改样式、合并单元格等,openpyxl 更强大。 |
通用建议
- 首选
pandas:对于绝大多数读取、分析和处理数据的任务,pandas是最方便、最高效的选择。 - 明确文件类型:首先确认你的 Excel 文件是
.xlsx还是.xls,这决定了你使用哪个引擎。 - 处理
.xls时指定编码:如果遇到乱码,尤其是处理.xls文件时,请务必加上encoding='gbk'或encoding='gb2312'参数。 - 检查数据:读取后,打印几行数据和列名,确保中文显示正常。
- 保存文件:如果你需要将处理后的数据写回 Excel,同样推荐使用
pandas的to_excel方法,它会自动处理编码,保存为.xlsx格式,避免新的乱码问题。# 将 DataFrame 保存为新的 Excel 文件 df.to_excel('output_with_chinese.xlsx', index=False, encoding='utf-8')
希望这份详细的指南能帮助你顺利地在 Python 中处理包含中文的 Excel 文件!
