将 shutil.make_archive 与 zipfile.ZIP_STORED 一起使用?

Posted

技术标签:

【中文标题】将 shutil.make_archive 与 zipfile.ZIP_STORED 一起使用?【英文标题】:Use shutil.make_archive with zipfile.ZIP_STORED? 【发布时间】:2013-04-01 19:36:14 【问题描述】:

在 Python 中,有没有办法使用 shutil.make_archive() 函数并将文件压缩设置为 zipfile.ZIP_STORED? (即未压缩)

文档显示有很多可选参数,但都没有设置文件压缩:

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])

【问题讨论】:

【参考方案1】:

不,shutil.make_archive 无法做到这一点。

如果the docs 中缺少相关标志不足以证明,您可以查看the source。

特别是在line 683,如果您的Python 有zipfile 模块,您可以看到它显式传递compression=zipfile.ZIP_DEFLATED,而line 634 的后备代码除了-r 和@ 之外不传递任何参数987654329@ 到zip 命令行工具。

这是一个高级函数,使琐碎的情况更容易;如果你想做任何事情zip/tar/gztar/bztar-specific,你可以而且应该使用底层库。

当然,如果你经常需要这个,你可以编写自己的make_archive-like wrapper(只需将相关代码从shutil中复制出来并修改你的副本即可)。

【讨论】:

@twasbrillig:感谢更新编辑!看起来有几个行号在 3.3 和 3.4 之间发生了变化,或者我一开始就弄错了,所以我不得不将其中两个移动到几行。

以上是关于将 shutil.make_archive 与 zipfile.ZIP_STORED 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

shutil make_archive导致嵌套的.zip文件[重复]

shutil make_archive 导致嵌套的 .zip 文件 [重复]

python内置库--shutil

python_shutil模块

shutil模块——压缩目录文件

如何使用 Python 创建文件路径的 zip 文件,包括空目录?