我正在尝试压缩src
文件夹中的内容,并将压缩文件保存在dst
文件夹中:
import shutil
src = '/home/bart/python_projects/testenv/sampler_proj/sampler/media/audio/slices/'
dst = '/home/bart/python_projects/testenv/sampler_proj/sampler/media/audio/zipped/'
shutil.make_archive('samples', 'zip', base_dir=src, root_dir=dst)
但是,samples.zip
文件不会保存到dst
文件夹中,而是保存到我的脚本所在的文件夹/home/bart/python_projects/testenv/sampler_proj/sampler/media/audio/
中。
我该如何解决?
我看过其他一些SO线程和shutil
文档,但是root_dir
和base_dir
的定义非常混乱。
答案 0 :(得分:0)
根据the docs:
shutil.make_archive(base_name,format [,root_dir [,base_dir [,verbose [,dry_run [,owner [,group [,logger []]]]]]]])))
创建一个存档文件(例如zip或tar)并返回其名称。
base_name是要创建的文件的名称,包括路径,减去任何特定于格式的扩展名。 format是存档格式:“ zip”(如果zlib模块可用),“ tar”之一”,“ gztar”(如果zlib模块可用),“ bztar”(如果bz2模块可用)或“ xztar”(如果lzma模块可用)。
(粗体字是我的)。
如果您不希望文件位于当前目录中,则第一个参数应包含完整的目标路径。
因此,我想您为root_dir
分配了错误的目录。根据文档,root_dir
应该是:
root_dir是一个目录,它将是存档的根目录;例如,我们通常在创建存档之前将chdir更改为root_dir。
尝试做:
src = '/home/bart/python_projects/testenv/sampler_proj/sampler/media/audio/slices/'
dst = '/home/bart/python_projects/testenv/sampler_proj/sampler/media/audio/zipped/'
pth = os.path.join(dst, 'samples')
shutil.make_archive(pth, 'zip', root_dir=src, base_dir=src)
在大多数情况下,root_dir
和base_dir
是同一目录,即您要存档的目录。为更复杂的案例提供这两者是有意义的,但这似乎不是您的案例。例如,如果要进入目录,然后通过递归创建单独的子目录存档。