将zip文件输出到特定目录,而不是脚本目录

时间:2019-04-27 21:47:48

标签: python shutil

我正在尝试压缩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_dirbase_dir的定义非常混乱。

1 个答案:

答案 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_dirbase_dir是同一目录,即您要存档的目录。为更复杂的案例提供这两者是有意义的,但这似乎不是您的案例。例如,如果要进入目录,然后通过递归创建单独的子目录存档。