在 python 中使用 zip() 时如何确保所有文件都已成功压缩,是不是有任何功能可以检查或确认?

Posted

技术标签:

【中文标题】在 python 中使用 zip() 时如何确保所有文件都已成功压缩,是不是有任何功能可以检查或确认?【英文标题】:How to ensure that all files were successfully zipped while using the zip() in python,is there any function to check or acknowledge?在 python 中使用 zip() 时如何确保所有文件都已成功压缩,是否有任何功能可以检查或确认? 【发布时间】:2019-05-13 12:11:17 【问题描述】:

我使用 shutil .make_archive("arch", "zip", path) 压缩了所有文件,想知道是否所有文件都被压缩了。我使用下面的代码压缩文件。

shutil.make_archive("arch", "zip", r"path")

【问题讨论】:

通常,当这样的操作失败时,它会通过引发异常来发出信号。相反,如果没有引发异常,您通常可以假设操作成功。 make_archive 似乎有这种行为方式,除非您亲眼看到该方法无法压缩所有文件并且不会引发异常。 【参考方案1】:

正如 Kevin/others 所指出的,在 Python(以及大多数具有“异常处理”的语言)中,您可以预期大多数例程都会在错误条件下引发/抛出异常

如果您关心细节,相关的 Python 源代码在 shutil 和 zipfile 中,您可以在其中看到它们使用适当的“上下文管理器”和 raise 异常,但主要依赖于较低级别的文件抛出的操作

如果您想要一些人工输出来监控进度,您可以使用logging 基础架构,例如:

import logging
logging.basicConfig(level=0)

shutil.make_archive("arch", "zip", "path", logger=logging)

(有关详细信息,请参阅tutorial)将导致它提供更多输出

【讨论】:

【参考方案2】:

我不明白你为什么要这样做?如果 make_archive 没有引发任何异常,则 path 中的所有文件都应该在 arch 中。

如果你想知道它,你可以:

使用shutil.unpack_archive解压缩存档

使用zipfile 像这样读取存档:

从 ZipFile 导入 ZipFile

使用 ZipFile("arch.zip") 作为 myzip: 打印(myzip.namelist())

【讨论】:

【参考方案3】:

this link 的示例 3 似乎表明 shutil.make_archive 返回一个字符串,其中包含所创建文件的路径和文件名。它显示该字符串用于检查新创建的存档。

【讨论】:

以上是关于在 python 中使用 zip() 时如何确保所有文件都已成功压缩,是不是有任何功能可以检查或确认?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保脚本由特定版本的 python 执行? [复制]

Python:当列表仅在运行时确定时,如何将可迭代列表传递给 zip?

如何使用 Python 2.7 使 zip_longest 在 itertools 中可用

如何使用 Python 的 zipfile 模块对 ZIP 文件中的文件设置权限(属性)?

如何将所有 python 代码捆绑到一个 zip 文件中?

在python中提取.zip