“BadZipFile:文件不是 zip 文件”- 突然弹出错误

2024-04-04

前一分钟我的脚本连续工作几天,下一分钟我收到此错误。

  File "<ipython-input-196-abdb28a77366>", line 1, in <module>
    runfile('F:/-/-/-/cleaner_games_appstore_babil.py', wdir='F:/-/-/-')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "F:/-/-/-/cleaner_games_appstore_babil.py", line 112, in <module>
    append_df_to_excel("stillfront.xlsx", dff, sheet_name='Apple_Babil', startrow=None, truncate_sheet=False, engine='openpyxl', header = False)

  File "F:/-/-/-/cleaner_games_appstore_babil.py", line 84, in append_df_to_excel
    writer.book = load_workbook(filename)

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 311, in load_workbook
    data_only, keep_links)

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 126, in __init__
    self.archive = _validate_archive(fn)

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 98, in _validate_archive
    archive = ZipFile(filename, 'r')

  File "C:\ProgramData\Anaconda3\lib\zipfile.py", line 1222, in __init__
    self._RealGetContents()

  File "C:\ProgramData\Anaconda3\lib\zipfile.py", line 1289, in _RealGetContents
    raise BadZipFile("File is not a zip file")

BadZipFile: File is not a zip file

澄清一下,我不使用任何 zip 文件。我在 StackOverflow 上找到了代码,但没有提到代码不起作用或发生错误。

该脚本应该将我的 pandas DataFrame 写入 Excel 工作表。 这是产生错误的代码部分:

def append_df_to_excel(filename, df, sheet_name='Apple_Babil', startrow=None,
                       truncate_sheet=False, 
                       **to_excel_kwargs):

    # ignore [engine] parameter if it was passed
    if 'engine' in to_excel_kwargs:
        to_excel_kwargs.pop('engine')

    writer = pd.ExcelWriter(filename, engine='openpyxl')
    try:

        # try to open an existing workbook
        writer.book = load_workbook(filename)
        # get the last row in the existing Excel sheet
        # if it was not specified explicitly
        if startrow is None and sheet_name in writer.book.sheetnames:
            startrow = writer.book[sheet_name].max_row

        # truncate sheet
        if truncate_sheet and sheet_name in writer.book.sheetnames:
            # index of [sheet_name] sheet
            idx = writer.book.sheetnames.index(sheet_name)
            # remove [sheet_name]
            writer.book.remove(writer.book.worksheets[idx])
            # create an empty sheet [sheet_name] using old index
            writer.book.create_sheet(sheet_name, idx)
        # copy existing sheets
        writer.sheets = {ws.title:ws for ws in writer.book.worksheets}

    except FileNotFoundError:
        # file does not exist yet, we will create it
        pass

    if startrow is None:
        startrow = 0
    # write out the new sheet
    df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs)
    # save the workbook
    writer.save()

append_df_to_excel("stillfront.xlsx", dff, sheet_name='Apple_Babil', startrow=None, truncate_sheet=False, engine='openpyxl', header = False)

代码没有被编辑或任何东西,只是开始不起作用。


Excel XLSX文件被压缩,XLS文件不是。

我相信这个错误与以下组合有关

  1. XLS没有拉链,并且
  2. 从 python-3.9 开始,openpyxl https://pypi.org/project/openpyxl/模块必须与XLSX files.

这个问题很容易解决,只需检查上传的 Excel 文件类型并使用适当的引擎读取即可Pandas.

按文件扩展名

from pathlib import Path
import pandas as pd

file_path = Path(filename)
file_extension = file_path.suffix.lower()[1:]

if file_extension == 'xlsx':
    df = pd.read_excel(file.read(), engine='openpyxl')
elif file_extension == 'xls':
    df = pd.read_excel(file.read())
elif file_extension == 'csv':
    df = pd.read_csv(file.read())
else:
    raise Exception("File not supported")

按文件 mime 类型

如果您碰巧有权访问文件 mimetype,则可以执行以下测试:

import pandas as pd

if file.content_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
    df = pd.read_excel(file.read(), engine='openpyxl')  # XLSX
elif file.content_type == 'application/vnd.ms-excel':
    df = pd.read_excel(file.read())  # XLS
elif file.content_type == 'text/csv':
    df = pd.read_csv(file.read())  # CSV
else:
    raise Exception("File not supported")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“BadZipFile:文件不是 zip 文件”- 突然弹出错误 的相关文章

随机推荐

  • 如何导入具有正确类型的 Vue 类组件?

    例如 如果我有一个单文件 Vue 类组件 MyComponent vue
  • 在 jQuery .serialize() 中包含空值字段

    我正在尝试通过 jQuery post 提交表单并通过序列化表单数据 form serialize 不幸的是未选中的字段单选按钮 or 复选框没有被序列化 因此已提交 有没有办法包含所有字段 无论它们是否包含值 我想这只会影响这样的字段
  • 使用seaborn和pandas绘图防止重叠条

    我正在尝试使用 pandas 绘图来创建带有 seaborn 导入的堆叠水平条形图 我想删除条之间的空间 但也不让条重叠 这是我尝试过的 import pandas as pd import numpy as pd import seabo
  • HDF5 - 并发、压缩和 I/O 性能 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 HDF5 性能和并发性有以下疑问 HDF5 支持并发写访问吗 撇开并发因素不谈 HDF5 的性能如何 输入 输出性能 does 压缩率影响性能
  • 适用于 IOS/Android 应用程序的谷歌云存储下载

    有没有一种方法可以将单个大文件作为多线程下载 并在从谷歌云存储下载后合并所有文件 是的 从 Google Cloud 存储下载对象时 您可以指定要检索的字节范围 使用 XML API 这将通过 Range 标头进行处理 这对于恢复中断的下载
  • 正则表达式如何验证字母之间的下划线

    我如何允许任何单词字符和下划线之间应该有一个字母和一个数字 示例 ab2 sb s s 但它不应该允许 sdc 或 s2 这是我的代码 a zA Z0 9 6 255 我在 javascript 上使用正则表达式 您需要将字符长度检查与模式
  • MVC 的替代方案 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 模型视图控制器的替代 设计方法 有哪些 MVC 似乎很流行 SO 是用它构建的 我知道很多 但它是唯一使用的方法吗 关于几种不同的交互
  • 错误:mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+

    我收到以下错误 数据库连接失败 mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4 1 请使用管理工具通过以下命令重置您的密码SET PASSWORD PASSWORD your existing password 这将存储一
  • C# 项目在 Visual Studio 中重建的原因

    我有一个包含约 320 个项目的大型解决方案 即使对单个 Web 表单进行很小的更改 也会导致测试 调试小更改所需的构建时间很长 我怀疑构建后文件复制任务会 触及 文件日期时间并导致多次重建 在没有任何强大的命名和版本控制影响的情况下 除了
  • 如何定义输出类型取决于输入类型的函数

    给定以下课程 case class AddRequest x Int y Int case class AddResponse sum Int case class ToUppercaseRequest str String case cl
  • 在 x86-64 asm 中:如果源操作数是两个立即值,是否有办法优化两个相邻的 32 位存储/写入内存?

    有没有一个好的方法来优化这段代码 x86 64 mov dword ptr rsp 0 mov dword ptr rsp 4 0 其中立即值可以是任何值 不一定为零 但在这种情况下始终是立即常量 原双店还慢吗 硬件中的写组合和 op 的并
  • Swift4:“MessageKind”没有成员“url”

    下面是 MessageKit 库的示例代码 目前 其行为是所有图像消息必须在显示给最终用户之前完全加载 因此需要花费大量时间等待 我想要的是在加载所有消息后加载图像 看 1 你会看到 kind 变量将是一个 mediaItem 看2 你会看
  • ENOENT:没有这样的文件或目录 - pug 中出现错误

    当上传到 Heroku 时 它会抛出此错误 而在本地主机上运行时不会出现错误 Here is browser message 这是我的display pug extends LoginLayout LoginLayout pug block
  • 计算沿 y 轴方向(角度测量)的变化率?

    我想计算 iPhone 沿 y 轴方向的变化率 1 最初我需要将参考定义为y轴 2 然后测量相对于定义参考的方向变化率 角度测量 CMAttitude 是否提供可靠的角度测量来实现此目的 或者我可以使用旋转矩阵或积分陀螺仪数据 我实现了这种
  • 如何在顶部显示中线

    我有一个正在运行的方便脚本ab然后生成情节 然而有一个问题 它向我显示了每一点 这很好 但是我还想看到它们之间的平均 线 我会在图中展示更多 那么有没有办法在上面添加中 中游侠呢 Script usr local bin gnuplot s
  • 如何存储位置敏感的哈希值?

    我已经有了生成局部敏感哈希的算法 但是我应该如何对它们进行存储以利用它们的特性 即相似的元素具有接近的哈希 具有汉明距离 在 matlab 代码中 我发现他们只是在要搜索的点的哈希值和数据库中的点的哈希值之间创建一个距离矩阵 以简化代码 同
  • Pyspark 出现 TypeError:无法 pickle _abc_data 对象

    我正在尝试使用 pyspark 从 pickled 模型生成预测 我使用以下命令获取模型 model deserialize python object filename with deserialize python object fil
  • 如何模拟 xml 进行单元测试?

    我需要对这个 GetData 方法进行单元测试 public MessageResponse GetData XmlElement requestElement MessageResponse MsgResponse new Message
  • 通过 PHP 脚本下载 Composer

    我有一个下载composer phar 的php 脚本 下载后我运行exec 安装软件包 文件夹结构是 ROOT public composer josn 然而 当我跑步时 exec php composer phar install d
  • “BadZipFile:文件不是 zip 文件”- 突然弹出错误

    前一分钟我的脚本连续工作几天 下一分钟我收到此错误 File