如何用Python读取扩展名是.csv但实际为XLS格式的文件?
解决方案:无需手动另存读取后缀错误的XLS文件
你的问题核心是文件实际为XLS二进制格式,但被错误命名为.csv后缀,Python库读取时因编码不匹配或格式识别问题抛出UnidecodeError,以下是两种直接读取的方案:
方案1:使用xlrd指定编码读取旧版XLS文件
适用于Excel 97-2003格式的XLS文件(Matlab的xlsread默认支持这类格式),注意需安装xlrd<2.0版本(2.0+版本不再支持XLS格式):
- 安装指定版本xlrd:
pip install xlrd==1.2.0
- 读取文件时指定编码覆盖(根据文件实际编码选择,中文文件常用
gbk或utf-8):
import xlrd # 直接读取后缀为.csv的XLS文件,指定编码 workbook = xlrd.open_workbook("your_file.csv", encoding_override="gbk") worksheet = workbook.sheet_by_index(0) # 逐行读取数据 for row_num in range(worksheet.nrows): row_values = worksheet.row_values(row_num) print(row_values)
方案2:使用Pandas自动处理格式与编码
Pandas的read_excel方法会自动检测文件实际格式(不受后缀名影响),同时支持指定编码和引擎:
- 安装依赖(根据文件格式选择引擎):
# 处理XLS文件需安装xlrd<2.0 pip install pandas xlrd==1.2.0 # 处理XLSX文件需安装openpyxl pip install pandas openpyxl
- 读取文件示例:
import pandas as pd # 读取XLS格式文件 df = pd.read_excel("your_file.csv", engine="xlrd", encoding="gbk") # 读取XLSX格式文件(如果实际是XLSX) # df = pd.read_excel("your_file.csv", engine="openpyxl") # 查看数据 print(df.head())
关键说明
- UnidecodeError的本质是文件字符编码与读取库默认编码不匹配,通过
encoding_override(xlrd)或encoding(Pandas)参数指定正确编码即可解决。 - Python库读取时不会严格依赖文件后缀名,只要指定对应格式的读取引擎/方法,就能直接处理实际格式为XLS/XLSX的文件。
内容的提问来源于stack exchange,提问作者Keun
相关产品推荐
相关产品推荐

