You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python读取扩展名是.csv但实际为XLS格式的文件?

解决方案:无需手动另存读取后缀错误的XLS文件

你的问题核心是文件实际为XLS二进制格式,但被错误命名为.csv后缀,Python库读取时因编码不匹配或格式识别问题抛出UnidecodeError,以下是两种直接读取的方案:

方案1:使用xlrd指定编码读取旧版XLS文件

适用于Excel 97-2003格式的XLS文件(Matlab的xlsread默认支持这类格式),注意需安装xlrd<2.0版本(2.0+版本不再支持XLS格式):

  1. 安装指定版本xlrd:
pip install xlrd==1.2.0
  1. 读取文件时指定编码覆盖(根据文件实际编码选择,中文文件常用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方法会自动检测文件实际格式(不受后缀名影响),同时支持指定编码和引擎:

  1. 安装依赖(根据文件格式选择引擎):
# 处理XLS文件需安装xlrd<2.0
pip install pandas xlrd==1.2.0
# 处理XLSX文件需安装openpyxl
pip install pandas openpyxl
  1. 读取文件示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:03:24