Pakattu tiedosto sisältää useita tiedostoja, hakemistoja ja alihakemistoja. Saatavilla on monia sovelluksia, joilla voidaan luoda pakattu tiedosto mistä tahansa suuresta tiedostosta tai hakemistosta ja hakea tiedostoja tai kansioita purkamalla pakattu tiedosto. Kun haluamme siirtää minkä tahansa suuren tiedoston tai kansion Internetin kautta, on parempi pakata sisältö ennen siirtoa. Tämä nopeuttaa tehtävää. Voit käyttää python-skriptejä minkä tahansa suuren tiedoston tai hakemiston pakkaamiseen ja purkamiseen. Pythonin zipfile-moduulia käytetään tehtävän suorittamiseen. Miten voit käyttää python3:a minkä tahansa tiedoston tai hakemiston pakkaamiseen, näytetään tässä opetusohjelmassa erilaisten esimerkkien avulla.
Luo uusi tiedosto nimeltä ‘zipcode1.py’ ja lisää seuraava koodi. zipfile-moduuli tuodaan tiedoston pakkaamista varten. temp.zip määritetään zip-tiedoston nimeksi kirjoitusmoodilla ja seuraavaksi kirjoitusmetodin parametreiksi annetaan alkuperäisen tiedoston nimi, temp.txt ja pakkaustyyppi.
zip_file = zipfile.ZipFile(‘temp.zip’, ‘w’)
zip_file.write(‘temp.txt’, compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()
Skriptin suoritus
Skriptin koko temp.txt on 27 tavua ja pakkauksen jälkeen temp.zip-tiedoston koko on 2 tavua.
Esimerkki 2: Tietyn hakemiston pakkaaminen
Luo uusi tiedosto nimeltä ‘zipcode2.py’ ja lisää seuraava koodi. Hakemisto voi sisältää monia tiedostoja, kansioita ja alikansioita. Hakemiston sisällön lukemiseksi pythonin os-moduuli tuodaan zipfile-moduulin kanssa hakemiston pakkaamiseksi. Tässä skriptissä pakkaamiseen käytetään hakemistoa mydir.
import os
import zipfile
# Julistetaan funktio, joka palauttaa kaikki tietyn hakemiston tiedostopolut
def retrieve_file_paths(dirName):
# Asetetaan tiedostopolkujen asetukset muuttujalle
filePaths =
# Luetaan kaikki hakemistot, alihakemistot ja tiedostoluettelot
juuren, hakemistojen ja tiedostojen osalta os.walk(dirName):
for filename in files:
# Luo täydellinen tiedostopolku käyttämällä os-moduulia.
filePath = os.path.join(root, filename)
filePaths.append(filePath)
# Palauta kaikki polut
return filePaths
# Julistetaan pääfunktio
def main():
# Määritä zipattavan hakemiston nimi
dir_name = ‘mydir’
# Kutsu funktiota hakemaan kaikki määritetyn hakemiston tiedostot ja kansiot
filePaths = retrieve_file_paths(dir_name)
# tulostaa luettelon kaikista zipattavista tiedostoista
print(‘Seuraava tiedostolista zipataan:’)
for fileName in filePaths:
print(fileName)
# tiedostojen kirjoittaminen zip-tiedostoon
zip_file = zipfile.ZipFile(dir_name+’.zip’, ‘w’)
with zip_file:
# kirjoittaa jokaisen tiedoston yksitellen
for file in filePaths:
zip_file.write(file)
print(dir_name+’.zip-tiedosto on luotu onnistuneesti!’)
# Kutsu pääfunktio
if __name__ == “__main__”:
main()
Skriptin suoritus
Mydir:n koko on 21 tavua ja pakkauksen jälkeen mydir.zip:n koko on 2 tavua.
Esimerkki-3: Komentoriviargumentilla annetun hakemiston pakkaaminen
Luo uusi tiedosto nimeltä ‘zipcode3.py’ ja lisää siihen seuraava koodi. Komentoriviarvon lukemista varten tuodaan toinen python-moduuli sys yhdessä os- ja zipfile-moduulien kanssa.
import os
import sys
import zipfile
# Julistetaan funktio, joka palauttaa tietyn hakemiston kaikki tiedostopolut
def retrieve_file_paths(dirName):
# Asetetaan tiedostopolut-muuttuja
filePaths =
# Luetaan kaikki hakemisto-, alihakemisto- ja tiedostoluettelot
juuren, hakemistojen ja tiedostojen osalta os.walk(dirName):
for filename in files:
# Luo täydellinen tiedostopolku käyttämällä os-moduulia.
filePath = os.path.join(root, filename)
filePaths.append(filePath)
# palauta kaikki polut
return filePaths
# Julistetaan main-funktio
def main():
# Tarkistetaan, että komentosarjaa ajettaessa on annettu kaksi argumenttia
if len (sys.argv) != 2 :
print (“Olet syöttänyt zipattavana olevan hakemiston nimen”)
sys.exit (1)
# Aseta hakemiston nimi komentoargumentista
dir_name = sys.argv
# Aseta zip-tiedoston nimi
zipFileName = dir_name + “.zip”
# Kutsu funktio, joka hakee kaikki määritetyn hakemiston tiedostot ja kansiot
filePaths = retrieve_file_paths(dir_name)
# tulosta luettelo zipattavista tiedostoista
print(‘The following list of files will be zipipped:’)
for fileName in filePaths:
print(fileName)
# kirjoita tiedostot ja kansiot zip-tiedostoon
zip_file = zipfile.ZipFile(zipFileName, ‘w’)
with zip_file:
# kirjoita jokainen tiedosto erikseen
for file in filePaths:
zip_file.write(file)
print(zipFileName+’ tiedosto on luotu onnistuneesti!’)
# Kutsu main-funktio
if __name__ == “__main__”:
main()
Skriptin suoritus
komentoriviargumentissa annetaan hakemiston nimi. Testin koko on 21 tavua ja pakkauksen jälkeen test.zip-tiedoston koko on 2 tavua.
Toivottavasti tämä opetusohjelma auttaa sinua käyttämään pythonia minkä tahansa tiedoston tai hakemiston pakkaamiseen.