zipfile pakata ja purkaa ZIP-tiedostoja Pythonilla

liiketoiminta

Pythonin standardikirjaston zipfile-moduulia voidaan käyttää tiedostojen pakkaamiseen ZIP-tiedostoiksi ja ZIP-tiedostojen purkamiseen. Se sisältyy standardikirjastoon, joten lisäasennusta ei tarvita.

Seuraava sisältö selitetään.

  • Pakkaa useita tiedostoja ZIP-tiedostoksi
  • Uuden tiedoston lisääminen olemassa olevaan ZIP-tiedostoon
  • Hakemiston (kansion) pakkaaminen ZIP-tiedostoksi
  • Pakattu ZIP-tiedostoon, jossa on salasana.
  • Tarkista ZIP-tiedoston sisältö.
  • Pura (purkaa) ZIP-tiedoston koko sisältö.
  • Valitse ZIP-tiedoston sisältö ja pura se.

Pakkaa useita tiedostoja ZIP-tiedostoksi

Luo ZipFile-olio ja käytä write()-metodia lisätäksesi tiedostot, jotka haluat pakata.

Jos haluat luoda uuden ZIP-tiedoston, määritä luotavan ZIP-tiedoston polku ZipFile-olion konstruktorin ensimmäiseksi argumentiksi ja toinen argumentti seuraavasti'w'

Lisäksi pakkaustapa voidaan määrittää kolmantena argumenttina.

  • zipfile.ZIP_STORED:Yhdistää vain useita tiedostoja ilman pakkausta (oletus)
  • zipfile.ZIP_DEFLATED:Normaali ZIP-pakkaus (zlib-moduuli vaaditaan)
  • zipfile.ZIP_BZIP2:BZIP2-pakkaus (bz2-moduuli vaaditaan)
  • zipfile.ZIP_LZMA:LZMA-pakkaus (lzma-moduuli vaaditaan)

BZIP2:lla ja LZMA:lla on korkeampi pakkaussuhde (voidaan pakata pienempään kokoon), mutta pakkaamiseen kuluva aika on pidempi.

Kirjoita()-metodissa tiedosto, jonka ensimmäinen argumentti on filename, kirjoitetaan ZIP-tiedostoon, jonka toinen argumentti on arcname. Jos arcname jätetään pois, tiedostonimeä käytetään sellaisenaan. arcname voi myös määrittää hakemistorakenteen.

ZipFile-olio on suljettava close()-metodilla, mutta jos käytät with-lausetta, se suljetaan automaattisesti, kun lohko on päättynyt.

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')

Määrittämällä write()-menetelmän compress_type-argumentin on myös mahdollista valita kunkin tiedoston pakkausmenetelmä.

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')

Uuden tiedoston lisääminen olemassa olevaan ZIP-tiedostoon

Jos haluat lisätä uuden tiedoston olemassa olevaan zip-tiedostoon, aseta konstruktorin ensimmäiseksi argumentiksi ZipFile-olion luomisen yhteydessä olemassa olevan zip-tiedoston polku. Aseta myös toisen argumentin tila seuraavasti.'a'

Tämän jälkeen, kuten yllä olevassa esimerkissä, lisää tiedosto käyttämällä write()-metodia.

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

Hakemiston (kansion) pakkaaminen ZIP-tiedostoksi

Jos haluat pakata kokonaisen hakemiston (kansion) yhdeksi ZIP-tiedostoksi, voit käyttää os.scandir()- tai os.listdir()-toimintoa tiedostoluettelon tekemiseen, mutta on helpompaa käyttää shutil-moduulin make_archive()-toimintoa.

Katso seuraava artikkeli.

Pakattu ZIP-tiedostoon, jossa on salasana.

zipfile-moduulin avulla et voi luoda salasanalla suojattuja ZIP-tiedostoja. Jos haluat pakata tiedoston salasanalla suojattuun zip-tiedostoon, käytä kolmannen osapuolen kirjastoa pyminizip.

Huomaa, että salasanasuojattujen ZIP-tiedostojen purku voidaan tehdä zipfile-moduulilla (katso alla).

Tarkista ZIP-tiedoston sisältö.

Voit tarkistaa olemassa olevan ZIP-tiedoston sisällön.

Luo ZipFile-olio asettamalla konstruktorin ensimmäiseksi argumentiksi file olemassa olevan zip-tiedoston polku ja toiseksi argumentiksi mode 'r'. Mode-argumentti voidaan jättää pois, koska oletusarvo on 'r'.

Voit käyttää ZipFile-olion namelist()-metodia saadaksesi luettelon arkistoitavista tiedostoista.

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']

Pura (purkaa) ZIP-tiedoston koko sisältö.

Jos haluat purkaa ZIP-tiedoston sisällön, luo ZipFile-olio, jonka konstruktorin ensimmäinen argumentti file on olemassa olevan ZIP-tiedoston polku ja toinen argumentti mode on 'r', kuten yllä olevassa esimerkissä. Mode-argumentti voidaan jättää pois, koska sen oletusarvo on 'r'.

ZipFile-olion extractall()-metodi purkaa (purkaa pakkauksen) ZIP-tiedoston koko sisällön. Ensimmäinen argumentti, path, määrittää hakemiston polun, johon tiedosto puretaan. Jos se jätetään pois, tiedostot puretaan nykyiseen hakemistoon.

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

Salasanan sisältävä ZIP-tiedosto voidaan purkaa määrittämällä salasana extractall()-menetelmän argumentiksi pwd.

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

Valitse ZIP-tiedoston sisältö ja pura se.

Jos haluat purkaa ja purkaa vain tietyt tiedostot, käytä menetelmää extract().

Extract()-menetelmän ensimmäinen argumentti on purettavan tiedoston nimi ja toinen argumentti path on hakemiston polku, johon puretaan. Jos path-argumentti jätetään pois, tiedosto puretaan nykyiseen hakemistoon. Purettavan tiedoston nimen on sisällettävä ZIP-tiedoston hakemiston polku, jos se on tallennettu sinne.

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

Kuten extractall()-menetelmässä, myös extract()-menetelmässä voit määrittää salasanan argumentiksi 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