【问题标题】:Pandas read_excel returns xlrd dependency error only for a specific filePandas read_excel 仅针对特定文件返回 xlrd 依赖错误
【发布时间】:2021-09-25 06:24:23
【问题描述】:

我有一个 python 脚本,它可以毫无问题地读取多个 Excel 文件 (.xlsx),因此:

df_file1 = pd.read_excel(myfile1, mysheet)

但是,我随后尝试使用类似代码读取另一个类似文件并收到依赖错误:

ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.

我工作的环境非常封闭,我不确定我是否可以安装 xlrd。我看不到任何使这个特定文件与我之前加载的文件不同的东西。它最初是一个 .xlsb,我重新保存为 .xlsx(因为同样地,我无法安装 pyxlsb)。但是,我成功打开的其他文件也进行了类似的转换。

我想知道某个特定文件可能有什么不同,如果其他类似文件不需要,则需要xlrd 打开它。

(我不认为这是关于 xlrd 依赖的其他类似问题的重复,因为这是关于确定特定文件需要 xlrd 的标准)

【问题讨论】:

    标签: python-3.x pandas xlsx


    【解决方案1】:

    read_excel documentation 开始,当未指定引擎且文件为 .xls 格式时使用 xlrd。但是,该文件肯定是以 .xlsx 格式保存的。

    明确指定openpyxl引擎:

    df_file1 = pd.read_excel(myfile1, mysheet, engine='openpyxl')
    

    返回错误 BadZipFile: File is not a zip file

    文件已正确保存且未损坏。
    但是,原始 .xlsb 文件已受密码保护。 以 .xlsx 格式重新保存时,Excel 已自动应用相同的密码保护。
    因此,实际问题是文件无意中受到密码保护

    推测read_excel,由于无法使用默认引擎打开文件,无法将其识别为 .xlsx 格式,尝试了替代引擎,然后在找不到可用引擎时失败。

    重新保存删除密码保护的文件,可以成功使用原来的read_excel语句,使用默认引擎,不需要xlrd

    希望这可以帮助遇到特定文件类似问题的其他人。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2019-01-04
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2021-03-23
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多