python 使用patool或zipfile解压文件报错NotImplementedError: That compression method is not supported

python解压文件有多种方式,目标解压zip文件,所以尝试使用patool或zipfile完成,代码如下:

"""patool的方案"""
import patoolib

patoolib.extract_archive(zip_file_path, outdir=res_file_path)

"""zipfile的方案"""
import zipfile

with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
    zip_ref.extractall(res_file_path)

二者均报错:

NotImplementedError: That compression method is not supported

原本以为是压缩文件本身有问题,加密了、压缩方法不支持、文件损坏;后来怀疑是python和依赖的版本问题,尝试了很多网上的方法都不成功。

后来偶然发现一句话 “patool是一个 Python 库,它为许多存档格式提供统一的命令行界面,依赖外部程序来处理这些格式。如果它报告不支持压缩方法,则意味着它尝试用于提取的基础工具不支持该特定方法。”

依赖外部程序,找到问题所在,我的虚拟机上没有7-zipwinrar之类的软件,安装上后,问题解决

确保patool和所有相关的外部工具(如unzip、7z等)已更新到最新版本。这些工具的较新版本可能增加了对相关压缩方法的支持。

确保 ZIP 文件所需的特定外部程序已安装并可在系统路径中访问。patool可能需要7z、unzip或其他工具来提取 ZIP 文件,具体取决于所使用的压缩方法。

新的探索发现,直接引用zipfile报错的原因可能是版本问题,查看pypi上的zipfile,包含多版本,安装zipfile39之后使用运行成功,感觉对应的zipfile37那些也能运行成功!

"""zipfile39的方案"""
import zipfile39

with zipfile39.ZipFile(zip_file_path, 'r') as zip_ref:
    zip_ref.extractall(res_file_path)

在打包包含patool的py文件成exe的时候,patool无法调用电脑上的7-zip工具导致exe运行不成功,改成zipfile39之后成功,也可以作为参考!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用`zipfile`解压文件时,可能会遇到`zipfile.BadZipFile: File is not a zip file`的错误。这个错误通常是由于文件不是有效的zip文件导致的。有几种可能的原因和解决方法可以尝试: 1. 确保文件路径正确:检查一下文件路径是否正确,包括文件名和文件后缀名是否正确。 2. 检查文件是否损坏:使用其他工具或方法尝试打开这个zip文件,确保文件没有损坏。如果文件损坏,可以尝试重新下载或获取一个有效的zip文件。 3. 检查文件是否真的是zip文件:有时候文件的后缀名可能是.zip,但实际上并不是有效的zip文件。可以尝试使用其他工具或方法验证一下这个文件是否真的是zip文件。 4. 检查文件编码:有时候文件的编码可能不是标准的UTF-8编码,这可能导致解压失败。可以尝试使用其他编码方式打开这个文件,或者将文件转换为UTF-8编码再进行解压。 5. 尝试使用其他库:如果以上方法都无法解决问题,可以尝试使用其他的解压库,例如`shutil`库的`unpack_archive`函数。 下面是一个使用`shutil`库解压文件的例子[^2]: ```python import shutil zip_file = 'temp.zip' dst_dir = 'destination_directory' shutil.unpack_archive(zip_file, dst_dir) ``` 这个例子中,`zip_file`是需要解压的zip文件的路径,`dst_dir`是解压文件的目标路径。使用`shutil.unpack_archive`函数可以解压zip文件到指定目录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值