使用 Python Shutil 的 Zip 文件,如文件资源管理器
Zip File with Python Shutil like File Explorer
背景
我正在尝试使用 python shutil 压缩目录,如下所示:
shutil.make_archive("~/Desktop/zipfile", 'zip', "~/Documents/foldertozip")
但结果只压缩了里面的文件 "foldertozip"。例如,
foldertozip
-- file1
-- file2
zipfile.zip
-- file1
-- file2
另一方面,如果我从 windows 文件资源管理器或 mac 查找器中压缩它,我会得到以下内容:
foldertozip
-- file1
-- file2
zipfile.zip
-- foldertozip
-- file1
-- file2
问题
如何使用 shutil 执行我可以从文件资源管理器执行的相同操作并包含基本目录?我知道我可以将 "foldertozip" 复制到具有相同名称的文件夹,然后压缩该文件夹,但如果可能的话,我更喜欢更干净的解决方案。
如果您同时通过 root_dir
和 base_dir
,make_archive
将执行您想要的操作。参见 the docs。
import shutil
shutil.make_archive('~/Desktop/zipfile', 'zip', '~/Documents/', 'foldertozip')
来自 make_archive 的文档:
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
创建存档文件(例如 zip 或 tar)并returns其名称。
base_name 是要创建的文件的名称,包括路径,减去任何格式特定的扩展名。 format 是存档格式:“zip”、“tar”、“bztar”或“gztar”之一。
root_dir 是将成为存档根目录的目录; IE。我们通常在创建存档之前将 chdir 放入 root_dir。
base_dir 是我们tart 归档的目录; IE。 base_dir 将是存档中所有文件和目录的公共前缀。
如果我理解正确的话,你需要让 base_dir 等于 "foldertozip" 并且 root_dir 等于 "foldertozip" 的父目录。
假设 foldertozip 在 "Documents"
下
所以这样的事情应该有效:
shutil.make_archive("~/Documents/zipfile", "zip", "~/Documents/", "foldertozip")
让我们知道这是否符合您的预期!
背景
我正在尝试使用 python shutil 压缩目录,如下所示:
shutil.make_archive("~/Desktop/zipfile", 'zip', "~/Documents/foldertozip")
但结果只压缩了里面的文件 "foldertozip"。例如,
foldertozip
-- file1
-- file2
zipfile.zip
-- file1
-- file2
另一方面,如果我从 windows 文件资源管理器或 mac 查找器中压缩它,我会得到以下内容:
foldertozip
-- file1
-- file2
zipfile.zip
-- foldertozip
-- file1
-- file2
问题
如何使用 shutil 执行我可以从文件资源管理器执行的相同操作并包含基本目录?我知道我可以将 "foldertozip" 复制到具有相同名称的文件夹,然后压缩该文件夹,但如果可能的话,我更喜欢更干净的解决方案。
root_dir
和 base_dir
,make_archive
将执行您想要的操作。参见 the docs。
import shutil
shutil.make_archive('~/Desktop/zipfile', 'zip', '~/Documents/', 'foldertozip')
来自 make_archive 的文档:
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
创建存档文件(例如 zip 或 tar)并returns其名称。
base_name 是要创建的文件的名称,包括路径,减去任何格式特定的扩展名。 format 是存档格式:“zip”、“tar”、“bztar”或“gztar”之一。
root_dir 是将成为存档根目录的目录; IE。我们通常在创建存档之前将 chdir 放入 root_dir。
base_dir 是我们tart 归档的目录; IE。 base_dir 将是存档中所有文件和目录的公共前缀。
如果我理解正确的话,你需要让 base_dir 等于 "foldertozip" 并且 root_dir 等于 "foldertozip" 的父目录。
假设 foldertozip 在 "Documents"
下所以这样的事情应该有效:
shutil.make_archive("~/Documents/zipfile", "zip", "~/Documents/", "foldertozip")
让我们知道这是否符合您的预期!