zipfile na komprimovanie a dekomprimovanie súborov ZIP v jazyku Python

obchodné

Modul zipfile štandardnej knižnice jazyka Python možno použiť na komprimovanie súborov do súborov ZIP a rozbalenie súborov ZIP. Je súčasťou štandardnej knižnice, takže nie je potrebná žiadna dodatočná inštalácia.

Vysvetľuje sa nasledujúci obsah.

  • Komprimovanie viacerých súborov do súboru ZIP
  • Pridanie nového súboru do existujúceho súboru ZIP
  • Komprimovanie adresára (priečinka) do súboru ZIP
  • Komprimované do súboru ZIP s heslom
  • Skontrolujte obsah súboru ZIP.
  • Rozbaľte (rozbaľte) celý obsah súboru ZIP.
  • Vyberte obsah súboru ZIP a rozbaľte ho.

Komprimovanie viacerých súborov do súboru ZIP

Vytvorte objekt ZipFile a pomocou metódy write() pridajte súbory, ktoré chcete komprimovať.

Ak chcete vytvoriť nový súbor ZIP, zadajte cestu k vytváranému súboru ZIP ako prvý argument konštruktora objektu ZipFile a druhý argument takto'w'

Okrem toho možno ako tretí argument zadať metódu kompresie.

  • zipfile.ZIP_STORED:Jednoducho spojte viacero súborov bez kompresie (predvolené nastavenie)
  • zipfile.ZIP_DEFLATED:Normálna kompresia ZIP (vyžaduje sa modul zlib)
  • zipfile.ZIP_BZIP2:Kompresia BZIP2 (vyžaduje sa modul bz2)
  • zipfile.ZIP_LZMA:Kompresia LZMA (vyžaduje sa modul lzma)

BZIP2 a LZMA majú vyšší kompresný pomer (možno ich komprimovať na menšiu veľkosť), ale čas potrebný na kompresiu je dlhší.

V metóde write() sa súbor s prvým argumentom filename zapíše do súboru ZIP s druhým argumentom arcname. Ak je vynechaný názov arcname, názov súboru sa použije tak, ako je. názov arcname môže špecifikovať aj adresárovú štruktúru.

Objekt ZipFile je potrebné uzavrieť metódou close(), ale ak použijete príkaz with, uzavrie sa automaticky po skončení bloku.

import zipfile

with zipfile.ZipFile('data/temp/new_comp.zip', 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt')
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

Zadaním argumentu compress_type metódy write() je tiež možné vybrať metódu kompresie pre každý súbor.

with zipfile.ZipFile('data/temp/new_comp_single.zip', 'w') as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt', compress_type=zipfile.ZIP_DEFLATED)
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

Pridanie nového súboru do existujúceho súboru ZIP

Ak chcete pridať nový súbor do existujúceho súboru zip, pri vytváraní objektu ZipFile nastavte prvý argument konštruktora na cestu k existujúcemu súboru zip. Druhý argument nastavte tiež nasledovne.'a'

Potom, rovnako ako v príklade vyššie, stačí pridať súbor pomocou metódy write().

with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
    existing_zip.write('data/temp/test4.txt', arcname='test4.txt')

Komprimovanie adresára (priečinka) do súboru ZIP

Ak chcete komprimovať celý adresár (priečinok) do jedného súboru ZIP, môžete použiť os.scandir() alebo os.listdir() na vytvorenie zoznamu súborov, ale jednoduchšie je použiť make_archive() v module shutil.

Pozri nasledujúci článok.

Komprimované do súboru ZIP s heslom

Modul zipfile neumožňuje vytvárať súbory ZIP chránené heslom. Ak chcete komprimovať súbor do súboru ZIP chráneného heslom, použite knižnicu tretej strany pyminizip.

Upozorňujeme, že dekomprimáciu súborov ZIP chránených heslom možno vykonať pomocou modulu zipfile (pozri nižšie).

Skontrolujte obsah súboru ZIP.

Môžete skontrolovať obsah existujúceho súboru ZIP.

Vytvorte objekt ZipFile nastavením prvého argumentu file v konštruktore na cestu k existujúcemu zip súboru a druhého argumentu mode na 'r'. Argument mode môžete vynechať, pretože predvolená hodnota je 'r'.

Na získanie zoznamu archivovaných súborov môžete použiť metódu namelist() objektu ZipFile.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    print(existing_zip.namelist())
# ['test1.txt', 'zipdir/test2.txt', 'zipdir/sub_dir/test3.txt', 'test4.txt']

Rozbaľte (rozbaľte) celý obsah súboru ZIP.

Ak chcete rozbaliť obsah súboru ZIP, vytvorte objekt ZipFile s prvým argumentom file v konštruktore ako cestou k existujúcemu súboru ZIP a druhým argumentom mode ako 'r', ako v príklade vyššie. Argument mode môžete vynechať, pretože je predvolene nastavený na 'r'.

Metóda extractall() objektu ZipFile extrahuje (rozbalí) celý obsah súboru ZIP. Prvý argument, cesta, určuje cestu k adresáru, do ktorého sa má extrahovať. Ak sa vynechá, súbory sa rozbalia do aktuálneho adresára.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extractall('data/temp/ext')

Súbor ZIP s heslom možno extrahovať zadaním hesla ako argumentu pwd metódy extractall().

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extractall('data/temp/ext_pass', pwd='password')

Vyberte obsah súboru ZIP a rozbaľte ho.

Ak chcete rozbaliť a extrahovať len niektoré súbory, použite metódu extract().

Prvý argument metódy extract() je názov súboru, ktorý sa má extrahovať, a druhý argument path je cesta k adresáru, do ktorého sa má extrahovať. Ak je argument cesta vynechaný, súbor sa extrahuje do aktuálneho adresára. Názov extrahovaného súboru by mal obsahovať cestu k adresáru v súbore ZIP, ak je v ňom uložený.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extract('test1.txt', 'data/temp/ext2')

Podobne ako metóda extractall(), aj metóda extract() umožňuje zadať heslo ako argument pwd.

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')
Copied title and URL