Stiskanje imenika (mape) v zip ali tar v Pythonu

Posel

Pri stiskanju celotnega imenika (mape) v datoteko zip v Pythonu lahko uporabite os.scandir() ali os.listdir(), da ustvarite seznam datotek in uporabite modul zipfile za njihovo stiskanje, vendar je lažje uporabiti make_archive () modula shutil.

Poleg formata zip so podprti tudi drugi formati, kot je tar.

Za več informacij o stiskanju in razpakiranju datotek zip z modulom zipfile glejte naslednji članek.

Stiskanje imenika (mape) v datoteko zip:shutil.make_archive()

Prvi argument, base_name, določa ime datoteke zip, ki jo je treba ustvariti (brez končnice), drugi argument, format, pa določa format arhiva.

Za obliko argumenta lahko izberete naslednje možnosti.

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

Tretji argument, root_dir, določa pot do korenskega imenika imenika, ki ga je treba stisniti, četrti argument, base_dir, pa določa pot do imenika, ki ga je treba stisniti glede na root_dir. Oba sta privzeto nastavljena na trenutni imenik.

Če je base_dir izpuščen, se stisne celoten root_dir.

data/temp
Denimo, da imamo imenik z naslednjo strukturo.

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, stisnjen z zgornjimi nastavitvami in z izpuščenim imenikom base_dir, bo razpakiran na naslednji način.

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

Če je za imenik base_dir določen imenik root_dir, se prikaže naslednje.

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

Novo_shutil_sub.zip, stisnjen z zgornjimi nastavitvami, bo razpakiran na naslednji način.

dir_sub
└── test_sub.txt