如何仅将文件添加到 zip 而不是在 Python 中指向它的文件夹路径?

ian*_*oad 3 python syntax zip

我正在使用下面的代码来压缩每天创建的备份文件。

import os, zipfile

zf = zipfile.ZipFile("Test.zip", "w")
for root, subdirs, files in os.walk("C:/Users/Bob/Desktop/Zip"):
    for filename in files:
        zf.write(os.path.join(root, filename))
zf.close()
Run Code Online (Sandbox Code Playgroud)

问题是,当我打开 zip 文件时,它包含通向该文件的路径中的所有文件夹。例如,在 zip 中,我会有一个名为 Users/Bob/Desktop/Zip/File.gdb 的文件夹

但我只想要 zip 中的 File.gdb。原因是当它包含所有这些文件夹时,它实际上并没有压缩文件。它与不在拉链内时的大小相同。但是如果我只压缩 File.gdb,它会从 30Mb 压缩到 3Mb。

任何帮助表示赞赏。

ice*_*ime 5

您需要查看以下arcname参数ZipFile.write

ZipFile.write(filename[, arcname[, compress_type]])

将命名的文件写入filename存档,为其指定存档名称arcname(默认情况下,这将与 相同filename,但没有驱动器号并删除前导路径分隔符)。

在您的情况下,您很可能想要:

zf.write(os.path.join(root, filename), filename, zipfile.ZIP_DEFLATED)
Run Code Online (Sandbox Code Playgroud)