Zipování je elegantní způsob komprese několika souborů a jejich spojení do jednoho. To šetří nejen úložný prostor, ale také šířku pásma při přenosu souboru po síti. Jednou z nejlepších vlastností zipu je, že funguje na všech hlavních platformách: Windows, Linux a Mac.
Zip používá bezeztrátovou kompresi, takže při komprimaci a dekomprimaci uchová všechna data. Soubory zip můžete také šifrovat a dešifrovat.
S tolika funkcemi, které můžete prozkoumat, zjistěte, jak můžete číst, zipovat a rozbalovat soubory pomocí modulu zipfile v Pythonu.
Co je to modul zipfile?
K manipulaci se soubory zip pomocí Pythonu můžete použít standardní modul zipfile. Pomocí tohoto modulu můžete otevírat a číst soubory zip, číst jejich metadata, vytvářet soubor zip, komprimovat jej a rozbalovat soubory. K dispozici jsou tři způsoby komprese: Deflate, Bzip2 a LZMA.
Jednou z věcí, které modul postrádá, je schopnost zpracovávat soubory na více discích, ale zvládá rozšíření ZIP64. Může také dešifrovat archivy zip, ale nešifrovat je. Pomocí modulu zipfile můžete získat metadata souboru zip, jako je datum a čas úpravy. Můžete také načíst podrobnosti, jako je operační systém použitý k vytvoření souboru, verze zip a velikost souboru v komprimovaném i nekomprimovaném formátu.
Jak komprimovat soubory pomocí Pythonu
Pomocí modulu zipfile v Pythonu můžete zazipovat více souborů do jednoho archivu. Importujte ZipFile modul z zipfile balíček k provedení požadovaných operací zip. Také import a os modul pro výběr a uložení souborů.
Definujte funkci get_all_file_paths(). Měl by přijmout parametr adresáře, který obsahuje cestu ke složce obsahující soubory ke komprimování.
Inicializujte prázdný seznam, který bude obsahovat seznam cest k souborům. Použijte cyklus for k získání úplného obsahu cílového adresáře pomocí os.walk() funkce. Tato funkce načte názvy souborů v adresářovém stromu tak, že se po něm pohybuje shora dolů nebo zdola nahoru. Pro každý adresář funkce vrací tři n-tice obsahující root, dirs a soubory.
Kořen je řetězec, který obsahuje úplnou cestu k adresáři. Seznam dirs obsahuje všechny podadresáře obsažené v adresáři. Seznam souborů obsahuje všechny soubory v adresáři.
Uvnitř smyčky deklarujte další smyčka pro iteraci seznamu souborů. Použijte os.path.join() funkce pro spojení názvu adresáře s každým souborem a vytvoření úplné cesty. Poté připojte tento úplný název souboru k seznamu, který jste vytvořili dříve. Po dokončení této operace vraťte seznam cest k souborům.
# importujte požadované moduly
z zipfile import ZipFile
import os# vytvořte funkci pro získání všech cest k souborům
defget_all_file_paths(adresář):
# inicializace prázdného seznamu pro uložení cest k souborům
cesty k souboru = []# procházejte soubory
provykořenit, adresáře, souboryvos.Procházka(adresář):
pro název souboru v souborech:
# připojte kořenový adresář a název souboru a vytvořte úplnou cestu k souboru
cesta k souboru = os.path.join (kořen, název souboru)
cesty k souboru.připojit(cesta k souboru)
# vrací všechny cesty k souborům
vrátit se cesty k souboru
Uložte cestu ke složce, která obsahuje soubory, které chcete komprimovat, do proměnné s názvem adresář. Zavolejte funkci, get_all_file_paths() které jste vytvořili dříve a uložte hodnotu, kterou vrací cesty k souboru.
Zobrazte uživateli zprávu, aby věděl, že toto jsou soubory, které program zazipuje. Iterujte přes soubory a zobrazte jejich názvy.
Předejte název, který chcete, aby měl váš soubor zip, spolu se specifikací, že program vrátí zapisovatelný soubor pomocí příkazu with ke zpracování výjimek. Iterujte přes každý soubor a použijte funkci write() přes zapisovatelný soubor do souboru zip.
Po dokončení operace se zobrazí zpráva vysvětlující, že program úspěšně zazipoval všechny soubory.
# cesta ke složce, kterou chcete komprimovat
adresář = './pythonzip'# volání funkce pro získání všech cest k souborům v adresáři
file_paths = get_all_file_paths (adresář)# tisk seznamu všech souborů, které chcete komprimovat
tisk('Seznam souborů, které budou komprimovány:')pro file_name v file_paths:
tisk(název souboru)# zápis souborů do souboru zip
s ZipFile('můj_soubor.zip', 'w') tak jako zip:
# napište každý soubor jeden po druhém
pro soubor v file_paths:
zip.napsat(soubor)
tisk('Všechny soubory jsou zazipované!')
Jak rozbalit soubory pomocí Pythonu
Implementace rozbalování souborů pomocí modulu zipfile je mnohem jednodušší. Importujte zipfile balíček od ZipFile modul a uložte název souboru zip, který chcete extrahovat, do proměnné. Použijte příkaz with ke zpracování výjimek a otevření souboru, který chcete extrahovat, v režimu čtení. Použijte printdir() funkce pro zobrazení obsahu souborů přítomných v zip.
Zobrazte zprávu o průběhu, že extrahujete soubory a použijte soubor extrahovat() funkce pro extrahování obsahu souboru zip do aktuálního pracovního adresáře. Alternativně můžete zahrnout parametr path pro změnu cesty, kam program extrahuje soubory.
Zobrazte zprávu pomocí tisk prohlášení o dokončení operace.
# import požadovaných modulů
z zipfile import ZipFile# předejte název souboru zip, který chcete extrahovat
název_souboru = "extract.zip"# otevření souboru zip v režimu čtení
s ZipFile (název_souboru, 'r') tak jako zip:
# zobrazit obsah souboru zip
zip.printdir()
# extrahování všech souborů
tisk("Probíhá extrahování...")
zip.extrahovat()
tisk('Všechny soubory jsou extrahovány!')
Více o souborech ZIP
Soubory ZIP si získaly velkou oblibu a používají se již desítky let. Populární weby, jako je GitHub a Disk Google, vám umožňují stáhnout sbírku souborů jako archiv zip. Program zip komprimuje sadu souborů do jednoho balíčku. To je v kontrastu s nástrojem, jako je tar, který balí soubory dohromady, ale nekomprimuje je.
Pokud chcete šifrovat soubory pomocí efektivnějšího algoritmu, jsou soubory RAR správnou cestou. RAR používá algoritmus AES-128, který je lepší než deflační algoritmus používaný soubory zip. Nakonec si vyberte ten, který nejlépe vyhovuje vašim potřebám.