4

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

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()

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

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

任何帮助表示赞赏。

4

1 回答 1

5

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

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

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

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

zf.write(os.path.join(root, filename), filename, zipfile.ZIP_DEFLATED)
于 2013-04-25T14:40:51.327 回答