Стиснення каталогу (папки) у zip або tar у Python

Бізнес

Під час стиснення всього каталогу (папки) у zip-файл у Python, ви можете використовувати os.scandir() або os.listdir() для створення списку файлів і використовувати модуль zipfile для їх стиснення, але його легше використовувати make_archive () модуля shutil простіше.

Окрім zip, також підтримуються інші формати, такі як tar.

Щоб отримати додаткові відомості про стиснення та розпакування zip-файлів за допомогою модуля zipfile, зверніться до наступної статті.

Стисніть каталог (папку) у zip-файл:shutil.make_archive()

Перший аргумент, base_name, визначає ім’я файлу zip, який буде створено (без розширення), а другий аргумент, format, визначає формат архіву.

Для формату аргументу можна вибрати наступне.

  • zip'
  • tar'
  • gztar'
  • bztar'
  • xztar'

Третій аргумент, root_dir, вказує шлях до кореневого каталогу каталогу, який потрібно стиснути, а четвертий аргумент, base_dir, визначає шлях до каталогу, який потрібно стиснути, відносно root_dir. За замовчуванням для обох встановлено поточний каталог.

Якщо base_dir опущено, весь root_dir буде стиснутий.

data/temp
Наприклад, припустимо, що у нас є каталог з такою структурою.

dir
├── dir_sub
   └── test_sub.txt
└── test.txt
import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

Файл new_shutil.zip, стиснутий із зазначеними вище налаштуваннями без урахування base_dir, буде розпаковано наступним чином.

new_shutil
├── dir_sub
   └── test_sub.txt
└── test.txt

Тоді, якщо каталог у root_dir вказано для base_dir, буде показано наступне.

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

Файл new_shutil_sub.zip, стиснутий із зазначеними вище налаштуваннями, буде розпаковано наступним чином.

dir_sub
└── test_sub.txt