Python - 使用 zipfile 模块压缩目录中的所有文件

标签 python python-zipfile

我正在尝试使用 python zipfile 模块压缩文件夹中的所有文件(该文件夹没有任何子目录),但似乎无法获得所需的输出。

我的 folderA 位于 F:\Projects\ProjectA\Folders\folderA 下,我的脚本位于 F:\Projects\ProjectA\CodeA\zipcode.py 下。我想压缩 folderA 中的所有文件,以便生成的 zip 文件在 F:\Projects\ProjectA\Folders 下命名为 folderA.zip 并使用原始文件名。

唯一的问题是解压缩结果会产生 Folders\folderA,而不仅仅是 folderA。它与 folderA 到脚本的相对路径有关,但我似乎无法获得所需的结果。

#zipcode.py
import os
import zipfile

filepath = "F:/Projects/ProjectA/Folders/folderA"

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')

for root, dirs, files in os.walk(filepath):
        for afile in files:
            archive.write(os.path.relpath(os.path.join(root, afile)))
        archive.close()

最佳答案

在您的循环中,使用arcname 参数更改存档成员的名称:

archive.write(os.path.join(root, afile),arcname=name_in_archive)

在哪里

name_in_archive = os.path.join(os.path.basename(filepath),afile)

保留 folderA 路径。

我不确定的一件事(取决于 python 的版本)是您可能必须将 Windows 反斜杠替换为斜杠,以便 .zip 文件是可移植的。不痛:

archive.write(os.path.join(root, afile),arcname=name_in_archive.replace(os.sep,"/"))

请注意,我已经删除了 os.path.relpath 调用,现在不需要,因为我们可以完全控制存档中文件的名称。

另请注意,打开存档时无需转换为绝对路径。 open 查找相对文件和绝对文件:

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')

可以这样写

archive = zipfile.ZipFile(filepath + '.zip', 'w')

关于Python - 使用 zipfile 模块压缩目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41451777/

相关文章:

python - 从网站的多个 View 访问 MySQL

python - 如果提供了文件的绝对路径,如何消除 zip 存档中的绝对路径?

python - 如何压缩以特定扩展名结尾的文件

python - 在python中上传web文件到mysql

python - 在python中使用argparser进行多个分组

Python Tkinter GUI 始终最小化加载

python - 使用 python iscpy 模块

python - 使用 Zipfile 和 Python 获取正确的目录结构

python - 如何使用 python zipfile 库检查 zip 文件是否拆分为多个存档?