在 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:当列表仅在运行时确定时,如何将可迭代列表传递给 zip?
如何使用 Python 2.7 使 zip_longest 在 itertools 中可用