Вывести zip-файл в определенную директорию, отличную от директории скрипта - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь сжать содержимое папки 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 довольно запутанные.

1 Ответ

0 голосов
/ 28 апреля 2019

Согласно документам :

shutil.make_archive (base_name, format [, root_dir [, base_dir [, verbose [, dry_run [, owner [, group [,logger]]]]]]])
Создайте файл архива (например, zip или tar) и верните его имя.
base_name - это имя файла для создания, включая путь, минус любойзависящее от формата расширение. форматом является формат архива: один из «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 - это один и тот же каталогтот, который вы хотите архивировать.Имеет смысл предоставить их оба для более сложных случаев, что не похоже на ваш случай.Например, если вы хотите зайти в каталог, а затем создать рекурсивный отдельный архив подкаталогов.

...