Komprimovaný soubor obsahuje mnoho souborů, adresářů a podadresářů. Existuje mnoho aplikací, které umožňují vytvořit komprimovaný soubor libovolně velkého souboru nebo adresáře a získat soubory nebo adresáře extrakcí komprimovaného souboru. Když chceme přenést nějaký velký soubor nebo složku přes Internet, pak je lepší obsah před přenosem zkomprimovat. Tím se úloha urychlí. Pro komprimaci a extrakci libovolně velkého souboru nebo adresáře můžete použít skripty jazyka python. k tomuto úkolu se používá modul zipfile jazyka python. Jak můžete použít python3 ke komprimaci libovolného souboru nebo adresáře, je ukázáno v tomto návodu na různých příkladech.
Vytvořte nový soubor s názvem ‘zipcode1.py’ a přidejte následující kód. ke komprimaci souboru je importován modul zipfile. souboru temp.zip je přiřazen název zip s režimem zápisu a dále jsou jako parametry v metodě zápisu zadány původní název souboru, temp.txt a typ komprese.
zip_file = zipfile.ZipFile(‘temp.zip’, ‘w’)
zip_file.write(‘temp.txt’, compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()
Spustit skript
Velikost souboru temp.txt je 27 bajtů a po kompresi je velikost souboru temp.zip 2 bajty.
Příklad-2: Komprese určitého adresáře
Vytvořte nový soubor s názvem ‘zipcode2.py’ a přidejte následující kód. Adresář může obsahovat mnoho souborů, složek a podsložek. Pro načtení obsahu adresáře je importován modul os jazyka python s modulem zipfile pro kompresi adresáře. V tomto skriptu je pro kompresi použit adresář mydir.
importovat os
importovat zipfile
# Deklarovat funkci pro vrácení všech cest k souborům daného adresáře
def retrieve_file_paths(dirName):
# nastavit proměnnou cesty k souborům
filePaths =
# načíst všechny adresáře, podadresáře a seznamy souborů
pro kořenový adresář, adresáře, soubory v os.walk(dirName):
for filename in files:
# Vytvořte úplnou cestu k souboru pomocí modulu os.
filePath = os.path.join(root, filename)
filePaths.append(filePath)
# vrátit všechny cesty
return filePaths
# Deklarovat hlavní funkci
def main():
# Přiřaďte název adresáře k zazipování
jméno_adresáře = ‘mydir’
# Vyvolejte funkci pro načtení všech souborů a složek přiřazeného adresáře
souboryPaths = retrieve_file_paths(jméno_adresáře)
# vypište seznam všech souborů k zazipování
print(‘Následující seznam souborů bude zazipován:
for fileName in filePaths:
print(fileName)
# zápis souborů do souboru zip
zip_file = zipfile.ZipFile(dir_name+’.zip’, ‘w’)
s zip_file:
# zápis každého souboru po jednom
for file in filePaths:
zip_file.write(file)
print(dir_name+’.zip soubor je úspěšně vytvořen!”)
#Volání funkce main
if __name__ == “__main__”:
main()
Spustit skript
Velikost adresáře mydir je 21 bajtů a po kompresi je velikost souboru mydir.zip 2 bajty.
Příklad-3: Komprese adresáře zadaného argumentem příkazového řádku
Vytvořte nový soubor s názvem ‘zipcode3.py’ a přidejte následující kód. Pro načtení hodnoty příkazového řádku je spolu s moduly os a zipfile importován další modul pythonu sys.
importujte os
importujte sys
importujte zipfile
# deklarujte funkci pro vrácení všech cest k souborům konkrétního adresáře
def retrieve_file_paths(dirName):
# nastavte proměnnou file paths
filePaths =
# načtěte všechny adresáře, podadresáře a seznamy souborů
pro kořenový adresář, adresáře, soubory v os.walk(dirName):
for filename in files:
# Vytvořte úplnou cestu k souboru pomocí modulu os.
filePath = os.path.join(root, filename)
filePaths.append(filePath)
# vrátit všechny cesty
return filePaths
# Deklarovat funkci main
def main():
# Zkontrolovat, zda jsou v době spuštění skriptu zadány dva argumenty
if len (sys.argv) != 2 :
print (“Zadali jste název adresáře pro zip”)
sys.exit (1)
# Nastavte název adresáře z argumentu příkazu
jméno_adresáře = sys.argv
# Nastavte název souboru zip
zipFileName = jméno_adresáře + “.zip”
# zavolejte funkci pro načtení všech souborů a složek přiřazeného adresáře
filePaths = retrieve_file_paths(dir_name)
# vypište seznam souborů, které mají být zazipovány
print(‘Následující seznam souborů bude zazipován:’)
for fileName in filePaths:
print(fileName)
# zapište soubory a složky do souboru zip
zip_file = zipfile.ZipFile(zipFileName, ‘w’)
s zip_file:
# zapište každý soubor zvlášť
for file in filePaths:
zip_file.write(file)
print(zipFileName+’ soubor je úspěšně vytvořen!’)
# Vyvolejte funkci main
if __name__ == “__main__”:
main()
Spustit skript
test je uveden jako název adresáře v argumentu příkazového řádku. Velikost souboru test je 21 bajtů a po kompresi je velikost souboru test.zip 2 bajty.
Doufám, že vám tento návod pomůže použít Python pro kompresi libovolného souboru nebo adresáře.
.