Pythoni standardraamatukogu zipfile'i moodulit saab kasutada failide pakkimiseks ZIP-failideks ja ZIP-failide lahtipakkimiseks. See sisaldub standardraamatukogus, nii et lisainstallatsiooni ei ole vaja.
Selgitatakse järgmist sisu.
- Mitme faili pakkimine ZIP-faili
- Uue faili lisamine olemasolevale ZIP-failile
- Kataloogi (kausta) pakkimine ZIP-failiks
- Kokkupakitud ZIP-faili koos parooliga
- Kontrollige ZIP-faili sisu.
- Ekstraheerige (pakkige lahti) kogu ZIP-faili sisu.
- Valige ZIP-faili sisu ja ekstraheerige see.
Mitme faili pakkimine ZIP-faili
Looge ZipFile objekt ja kasutage meetodit write(), et lisada failid, mida soovite tihendada.
Uue ZIP-faili loomiseks määrake loodava ZIP-faili tee ZipFile-objekti konstruktori esimeseks argumendiks ja teiseks argumendiks järgnevalt'w'
Lisaks saab kolmanda argumendina määrata tihendusmeetodi.
zipfile.ZIP_STORED
:Lihtsalt kombineeri mitu faili ilma pakkimiseta (vaikimisi)zipfile.ZIP_DEFLATED
:Tavaline ZIP-pakkimine (vajalik zlib-moodul)zipfile.ZIP_BZIP2
:BZIP2 pakkimine (bz2 moodul vajalik)zipfile.ZIP_LZMA
:LZMA pakkimine (vajalik lzma moodul)
BZIP2 ja LZMA on suurema pakkimissuhtega (neid saab kokku suruda väiksema suurusega), kuid pakkimiseks kuluv aeg on pikem.
Meetodis write() kirjutatakse esimese argumendiga faili filename teise argumendiga arcname ZIP-faili. Kui arcname jäetakse välja, kasutatakse failinime sellisena, nagu see on. arcname võib määrata ka kataloogistruktuuri.
ZipFile objekt tuleb sulgeda meetodiga close(), kuid kui kasutate käsku with, suletakse see automaatselt, kui plokk on lõppenud.
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äärates meetodi write() argumenti compress_type, on samuti võimalik valida iga faili jaoks pakkimismeetodit.
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')
Uue faili lisamine olemasolevale ZIP-failile
Uue faili lisamiseks olemasolevale zip-failile tuleb ZipFile-objekti loomisel määrata konstruktori esimeseks argumendiks olemasoleva zip-faili tee. Määrake ka teise argumendi režiim järgmiselt.'a'
Seejärel, nagu ülaltoodud näites, lihtsalt lisage fail, kasutades meetodit write().
with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
existing_zip.write('data/temp/test4.txt', arcname='test4.txt')
Kataloogi (kausta) pakkimine ZIP-failiks
Kui soovite terve kataloogi (kausta) ühte ZIP-faili tihendada, võite kasutada failide nimekirja koostamiseks os.scandir() või os.listdir(), kuid lihtsam on kasutada shutil-mooduli funktsiooni make_archive().
Vt järgmist artiklit.
- Seotud artiklid:Kataloogi (kausta) pakkimine zip või tar kujul Pythonis
Kokkupakitud ZIP-faili koos parooliga
Zipfaili moodul ei võimalda luua parooliga kaitstud ZIP-kirju. Kui soovite faili parooliga kaitstud zip-failiks tihendada, kasutage kolmanda osapoole raamatukogu pyminizip.
Pange tähele, et parooliga kaitstud ZIP-kirjade dekompressiooni saab teha zipfile-mooduliga (vt allpool).
Kontrollige ZIP-faili sisu.
Saate kontrollida olemasoleva ZIP-faili sisu.
Looge ZipFile objekt, määrates konstruktori esimeseks argumendiks faili olemasoleva zip-faili tee ja teiseks argumendiks mode 'r'. Argumendi mode võib ära jätta, kuna vaikimisi on 'r'.
Arhiveeritud failide nimekirja saamiseks saate kasutada ZipFile-objekti meetodit namelist().
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']
Ekstraheerige (pakkige lahti) kogu ZIP-faili sisu.
ZIP-faili sisu lahtipakkimiseks looge objekt ZipFile, mille konstruktori esimene argument fail on olemasoleva ZIP-faili tee ja teine argument mode on 'r', nagu ülaltoodud näites. Argumendi mode võib ära jätta, kuna selle vaikimisi väärtus on 'r'.
ZipFile-objekti meetod extractall() ekstraheerib (dekompresseerib) kogu ZIP-faili sisu. Esimene argument, path, määrab kataloogi tee, kuhu ekstraheerida. Kui see jäetakse ära, siis ekstraheeritakse failid praegusesse kataloogi.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extractall('data/temp/ext')
Parooliga ZIP-faili saab ekstraheerida, määrates parooli meetodi extractall() argumendiks pwd.
with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
pass_zip.extractall('data/temp/ext_pass', pwd='password')
Valige ZIP-faili sisu ja ekstraheerige see.
Kui soovite ainult teatud faile lahtipakendada ja ekstraheerida, kasutage meetodit extract().
Meetodi extract() esimene argument on ekstraheeritava faili nimi ja teine argument path on kataloogi tee, kuhu ekstraheerida. Kui path argument jäetakse ära, siis ekstraheeritakse fail praegusesse kataloogi. Ekstraheeritava faili nimi peaks sisaldama ZIP-faili kataloogi teed, kui see on seal salvestatud.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extract('test1.txt', 'data/temp/ext2')
Nagu meetod extractall(), võimaldab ka meetod extract() määrata argumendina pwd parooli.
with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')