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

Бізнэс

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

У дадатак да zip, іншыя фарматы, такія як tar таксама падтрымліваюцца.

Для атрымання дадатковай інфармацыі аб сціску і распакаванні zip-файлаў з дапамогай модуля zipfile, калі ласка, звярніцеся да наступнага артыкула.

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

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

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

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

Трэці аргумент, root_dir, вызначае шлях да каранёвага каталога каталога, які трэба сціскаць, а чацвёрты аргумент, base_dir, вызначае шлях да каталога, які трэба сціскаць, адносна каранёвага каталога. Абодва ўсталёўваюцца ў бягучы каталог па змаўчанні.

Калі base_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, сціснуты з названымі вышэй наладамі без базы_каталог, будзе распакаваны наступным чынам.

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

Затым, калі каталог у каранёвай_каталогі пазначаны для 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