zipfile kukandamiza na kufinya faili za ZIP kwenye Python

Biashara

Moduli ya zipfile ya maktaba ya kawaida ya Python inaweza kutumika kubana faili kwenye ZIP na kubandua faili za ZIP. Imejumuishwa kwenye maktaba ya kawaida, kwa hivyo hakuna usakinishaji wa ziada unaohitajika.

Yaliyomo yafuatayo yanafafanuliwa.

  • Finya faili nyingi kuwa faili ya ZIP
  • Ongeza faili mpya kwa faili iliyopo ya ZIP
  • Finyaza saraka (folda) kuwa faili ya ZIP
  • Imebanwa kuwa faili ya ZIP na nenosiri
  • Angalia yaliyomo kwenye faili ya ZIP.
  • Toa (unpack) maudhui yote ya faili ya ZIP.
  • Chagua yaliyomo kwenye faili ya ZIP na uitoe.

Finya faili nyingi kuwa faili ya ZIP

Unda kitu cha ZipFile na utumie njia ya write() kuongeza faili unazotaka kubana.

Ili kuunda faili mpya ya ZIP, taja njia ya faili ya ZIP itakayoundwa kama hoja ya kwanza ya mjenzi wa kitu cha ZipFile, na hoja ya pili kama ifuatavyo.w'

Kwa kuongeza, njia ya ukandamizaji inaweza kutajwa kama hoja ya tatu.

  • zipfile.ZIP_STORED:Changanya tu faili nyingi bila compression (chaguo-msingi)
  • zipfile.ZIP_DEFLATED:Mfinyazo wa kawaida wa ZIP (moduli ya zlib inahitajika)
  • zipfile.ZIP_BZIP2:Mfinyazo wa BZIP2 (moduli ya bz2 inahitajika)
  • zipfile.ZIP_LZMA:Mfinyazo wa LZMA (moduli ya lzma inahitajika)

BZIP2 na LZMA zina uwiano wa juu wa ukandamizaji (unaweza kukandamizwa hadi ukubwa mdogo), lakini muda unaohitajika kwa ukandamizaji ni mrefu zaidi.

Kwa njia ya kuandika (), faili iliyo na jina la faili la hoja ya kwanza imeandikwa kwa faili ya ZIP na arcname ya pili ya hoja. Ikiwa arcname imeachwa, jina la faili linatumika kama lilivyo. arcname pia inaweza kutaja muundo wa saraka.

Kitu cha ZipFile kinahitaji kufungwa kwa njia ya close(), lakini ukitumia with statement, itafungwa kiotomatiki kizuizi kitakapokamilika.

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

Kwa kubainisha compress_type hoja ya kuandika() mbinu, inawezekana pia kuchagua njia ya compression kwa kila faili.

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

Ongeza faili mpya kwa faili iliyopo ya ZIP

Ili kuongeza faili mpya kwa faili iliyopo ya zip, weka hoja ya kwanza ya mjenzi kwenye njia ya faili iliyopo ya zip wakati wa kuunda kitu cha ZipFile. Pia, weka modi ya hoja ya pili kama ifuatavyo.a'

Kisha, kama katika mfano hapo juu, ongeza tu faili kwa kutumia njia ya kuandika ().

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

Finyaza saraka (folda) kuwa faili ya ZIP

Ikiwa unataka kubana saraka nzima (folda) kuwa faili moja ya ZIP, unaweza kutumia os.scandir() au os.listdir() kutengeneza orodha ya faili, lakini ni rahisi kutumia make_archive() kwenye shutil. moduli.

Tazama makala ifuatayo.

Imebanwa kuwa faili ya ZIP na nenosiri

Sehemu ya zipfile haikuruhusu kuunda ZIP zilizolindwa na nenosiri. Ikiwa unataka kubana faili kuwa faili ya zip iliyolindwa na nenosiri, tumia maktaba ya mtu wa tatu pyminizip.

Kumbuka kuwa upunguzaji wa ZIP zinazolindwa na nenosiri unaweza kufanywa kwa moduli ya zipfile (tazama hapa chini).

Angalia yaliyomo kwenye faili ya ZIP.

Unaweza kuangalia yaliyomo kwenye faili iliyopo ya ZIP.

Unda kitu cha ZipFile kwa kuweka faili ya hoja ya kwanza katika mjenzi hadi njia ya faili iliyopo ya zip na modi ya hoja ya pili kuwa ‘r’. Hoja ya hali inaweza kuachwa kwani chaguo-msingi ni ‘r’.

Unaweza kutumia namelist() njia ya kitu cha ZipFile kupata orodha ya faili zilizohifadhiwa.

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

Toa (unpack) maudhui yote ya faili ya ZIP.

Ili kufungua yaliyomo kwenye faili ya ZIP, unda kitu cha ZipFile na faili ya hoja ya kwanza katika kijenzi kama njia ya faili iliyopo ya ZIP na modi ya hoja ya pili kama ‘r’, kama ilivyo kwenye mfano hapo juu. Hoja ya hali inaweza kuachwa kwani inabadilika kuwa ‘r’.

Mbinu ya extractall() ya kipengee cha ZipFile huchota (hupunguza) maudhui yote ya faili ya ZIP. Hoja ya kwanza, njia, inabainisha njia ya saraka ya kutoa kwa. Ikiwa imeachwa, faili zitatolewa kwenye saraka ya sasa.

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

Faili ya ZIP iliyo na nenosiri inaweza kutolewa kwa kubainisha nenosiri kama hoja ya pwd ya extractall() mbinu.

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

Chagua yaliyomo kwenye faili ya ZIP na uitoe.

Ikiwa unataka kufungua na kutoa faili fulani tu, tumia njia ya dondoo ().

Hoja ya kwanza ya njia ya dondoo() ni jina la faili kutoa, na njia ya pili ya hoja ni njia ya saraka kutoa. Ikiwa hoja ya njia imeachwa, faili itatolewa kwenye saraka ya sasa. Jina la faili itakayotolewa linapaswa kujumuisha njia ya saraka katika faili ya ZIP ikiwa imehifadhiwa hapo.

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

Kama njia ya extractall(), dondoo() njia pia hukuruhusu kutaja nenosiri kama hoja 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