Сжатие каталогов в python - PullRequest
0 голосов
/ 11 января 2020

Я попытаюсь объяснить это на примере.

abc
├── test
    ├── dir1
    ├── dir2
    ├── not_for_zipping.txt

Я хочу сжать все каталоги в test dir (в данном примере это dir1 и dir2 ) Прямо сейчас я сделал это так:

    directory = dlg.lineEdit_zipfile_path2.text() // this should be path to test dir. (.../abc/test/)
    arr = os.listdir(directory)
    for item in arr:
        allfiles2zip = directory + item
        try:
            shutil.make_archive(item,'zip', + allfiles2zip)
        except OSError:
            pass

похоже, что это работает, но все каталоги ( dir1 и dir2 ) сжаты до:. ../abc/here

abc
├── dit1.zip
├── dir2.zip
├── test
    ├── dir1
    ├── dir2
    ├── not_for_zipping.txt

но я хотел бы получить эти файлы по выбранному пути (каталогу) ... abc / test / здесь

abc
├── test
    ├── dir1
    ├── dir2
    ├── not_for_zipping.txt
    ├── dir1.zip
    ├── dir2.zip

У вас есть идеи, как я могу это изменить? Кстати, есть ли у вас лучший способ для этого случая?

1 Ответ

0 голосов
/ 11 января 2020

Вы можете использовать путь в имени файла

make_archive('test/' + item, 'zip', ...)

В конце концов вы можете изменить папку перед сжатием

old_folder = os.getcwd()
os.chdir('test')
shutil.make_archive(item, 'zip', ...)
os.chdir(old_folder)
...