zipfile kanggo compress lan uncompress file ZIP ing Python

Bisnis

Modul zipfile saka perpustakaan standar Python bisa digunakake kanggo compress file menyang ZIP lan uncompress file ZIP. Iku kalebu ing perpustakaan standar, supaya ora instalasi tambahan dibutuhake.

Andharan ing ngisor iki dijlentrehake.

  • Kompres sawetara file menyang file ZIP
  • Tambah file anyar menyang file ZIP sing wis ana
  • Kompres direktori (folder) menyang file ZIP
  • Dikompres menyang file ZIP kanthi sandhi
  • Priksa isi file ZIP.
  • Ekstrak (unpack) kabeh isi file ZIP.
  • Pilih isi file ZIP lan extract.

Kompres sawetara file menyang file ZIP

Nggawe obyek ZipFile lan nggunakake nulis () cara kanggo nambah file sing pengin compress.

Kanggo nggawe file ZIP anyar, nemtokake path file ZIP sing bakal digawe minangka argumen pisanan konstruktor obyek ZipFile, lan argumen kapindho minangka nderekw'

Kajaba iku, cara kompresi bisa ditemtokake minangka argumen katelu.

  • zipfile.ZIP_STORED:Cukup gabungke sawetara file tanpa kompresi (standar)
  • zipfile.ZIP_DEFLATED:Kompresi ZIP normal (modul zlib dibutuhake)
  • zipfile.ZIP_BZIP2:Kompresi BZIP2 (modul bz2 dibutuhake)
  • zipfile.ZIP_LZMA:Kompresi LZMA (modul lzma dibutuhake)

BZIP2 lan LZMA duwe rasio komprèsi sing luwih dhuwur (bisa dikompres menyang ukuran sing luwih cilik), nanging wektu sing dibutuhake kanggo kompresi luwih suwe.

Ing metode write(), file kanthi jeneng berkas argumen pisanan ditulis menyang file ZIP kanthi argumen argumen kapindho. Yen arcname diilangi, jeneng berkas digunakake minangka. arcname uga bisa nemtokake struktur direktori.

Objek ZipFile kudu ditutup kanthi cara cedhak (), nanging yen sampeyan nggunakake statement karo, bakal ditutup kanthi otomatis nalika pamblokiran wis rampung.

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

Kanthi nemtokake argumen compress_type saka cara nulis (), uga bisa milih cara komprèsi kanggo saben file.

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

Tambah file anyar menyang file ZIP sing wis ana

Kanggo nambah file anyar menyang file zip sing wis ana, atur argumen pisanan konstruktor menyang path file zip sing ana nalika nggawe obyek ZipFile. Uga, setel mode argumen kapindho kaya ing ngisor iki.a'

Banjur, kaya ing conto ing ndhuwur, mung nambah file nggunakake metode write ().

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

Kompres direktori (folder) menyang file ZIP

Yen sampeyan pengin compress kabeh direktori (folder) menyang file ZIP siji, sampeyan bisa nggunakake os.scandir () utawa os.listdir () kanggo nggawe dhaptar file, nanging luwih gampang nggunakake make_archive () ing shutil. modul.

Waca artikel ing ngisor iki.

Dikompres menyang file ZIP kanthi sandhi

Modul zipfile ora ngidini sampeyan nggawe ZIP sing dilindhungi sandhi. Yen sampeyan pengin ngompres file menyang file zip sing dilindhungi sandhi, gunakake pyminizip perpustakaan pihak katelu.

Elinga yen dekompresi ZIP sing dilindhungi sandi bisa ditindakake kanthi modul zipfile (ndeleng ngisor).

Priksa isi file ZIP.

Sampeyan bisa mriksa isi file ZIP sing wis ana.

Nggawe obyek ZipFile kanthi nyetel file argumen pisanan ing konstruktor menyang path file zip sing wis ana lan mode argumen kapindho dadi ‘r’. Argumen mode bisa diilangi amarga standar yaiku ‘r’.

Sampeyan bisa nggunakake cara namelist () saka obyek ZipFile kanggo njaluk dhaptar file arsip.

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

Ekstrak (unpack) kabeh isi file ZIP.

Kanggo mbongkar isi file ZIP, gawe obyek ZipFile kanthi file argumen pisanan ing konstruktor minangka path menyang file ZIP sing wis ana lan mode argumen kapindho minangka ‘r’, kaya ing conto ing ndhuwur. Argumen mode bisa diilangi amarga standar kasebut dadi ‘r’.

Metode extractall () saka obyek ZipFile ngekstrak (uncompresses) kabeh isi file ZIP. Argumentasi pisanan, path, nemtokake path direktori kanggo extract. Yen diilangi, file kasebut bakal diekstrak menyang direktori saiki.

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

File ZIP kanthi sandhi bisa diekstrak kanthi nemtokake sandhi minangka argumen pwd saka metode extractall ().

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

Pilih isi file ZIP lan extract.

Yen sampeyan pengin mbongkar lan extract mung file tartamtu, nggunakake extract () cara.

Argumentasi pisanan saka metode extract () yaiku jeneng file sing bakal diekstrak, lan path argumentasi kapindho yaiku path direktori sing bakal diekstrak. Yen argumen path diilangi, file kasebut bakal diekstrak menyang direktori saiki. Jeneng file sing bakal diekstrak kudu kalebu path menyang direktori ing file ZIP yen disimpen ing kono.

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

Kaya metode extractall (), metode extract () uga ngidini sampeyan nemtokake sandhi minangka argumen 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