zipfile til að þjappa og afþjappa ZIP skrár í Python

Viðskipti

Hægt er að nota zipfile-eininguna í Python staðlaða bókasafninu til að þjappa skrám í ZIP-skrár og taka upp ZIP-skrár. Það er innifalið í venjulegu bókasafni, svo engin viðbótaruppsetning er nauðsynleg.

Eftirfarandi innihald er útskýrt.

  • Þjappaðu mörgum skrám í ZIP skrá
  • Bættu nýrri skrá við núverandi ZIP-skrá
  • Þjappaðu möppu (möppu) í ZIP skrá
  • Þjappað í ZIP skrá með lykilorði
  • Athugaðu innihald ZIP skráarinnar.
  • Dragðu út (pakkaðu upp) öllu innihaldi ZIP skráarinnar.
  • Veldu innihald ZIP skráarinnar og dragðu hana út.

Þjappaðu mörgum skrám í ZIP skrá

Búðu til ZipFile hlut og notaðu write() aðferðina til að bæta við skrám sem þú vilt þjappa.

Til að búa til nýja ZIP-skrá, tilgreinið slóð ZIP-skrárinnar sem á að búa til sem fyrstu breytu byggingaraðila ZipFile-hlutarins og seinni breytuna sem hér segirw'

Að auki er hægt að tilgreina þjöppunaraðferðina sem þriðju rökin.

  • zipfile.ZIP_STORED:Bara sameina margar skrár án þjöppunar (sjálfgefið)
  • zipfile.ZIP_DEFLATED:Venjuleg ZIP þjöppun (zlib mát krafist)
  • zipfile.ZIP_BZIP2:BZIP2 þjöppun (bz2 mát krafist)
  • zipfile.ZIP_LZMA:LZMA þjöppun (lzma mát krafist)

BZIP2 og LZMA hafa hærra þjöppunarhlutfall (hægt að þjappa í minni stærð), en tíminn sem þarf til þjöppunar er lengri.

Í write() aðferðinni er skráin með fyrsta rifrildinu skráarnafni skrifuð í ZIP skrá með seinni rifrildinu arcname. Ef arcname er sleppt er skráarnafn notað eins og það er. arcname getur einnig tilgreint möppuskipulag.

Loka þarf ZipFile hlutnum með close() aðferðinni, en ef þú notar with setninguna verður honum lokað sjálfkrafa þegar blokkinni er lokið.

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

Með því að tilgreina compress_type argumentið í write() aðferðinni er einnig hægt að velja þjöppunaraðferð fyrir hverja skrá.

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

Bættu nýrri skrá við núverandi ZIP-skrá

Til að bæta nýrri skrá við núverandi zip-skrá skaltu stilla fyrstu viðfangsefni smiðsins á slóð núverandi zip-skráar þegar ZipFile hluturinn er búinn til. Stilltu líka seinni röksemdarhaminn sem hér segir.a'

Síðan, eins og í dæminu hér að ofan, bættu bara við skránni með því að nota write() aðferðina.

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

Þjappaðu möppu (möppu) í ZIP skrá

Ef þú vilt þjappa heila möppu (möppu) í eina ZIP skrá geturðu notað os.scandir() eða os.listdir() til að búa til lista yfir skrár, en það er auðveldara að nota make_archive() í shutilinu mát.

Sjá eftirfarandi grein.

Þjappað í ZIP skrá með lykilorði

Zipfile-einingin leyfir þér ekki að búa til zip-skjöl sem eru vernduð með lykilorði. Ef þú vilt þjappa skrá í zip-skrá sem er varin með lykilorði, notaðu þriðja aðila bókasafnið pyminizip.

Athugaðu að hægt er að afþjappa zip-skrám sem eru varin með lykilorði með zipfile einingunni (sjá hér að neðan).

Athugaðu innihald ZIP skráarinnar.

Þú getur athugað innihald núverandi ZIP skráar.

Búðu til ZipFile hlut með því að stilla fyrstu breytuskrána í smíði á slóð núverandi zip skráar og seinni breytuhaminn á ‘r’. Hægt er að sleppa stillingarrökum þar sem sjálfgefið er ‘r’.

Þú getur notað namelist() aðferð ZipFile hlutarins til að fá lista yfir geymdar skrár.

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

Dragðu út (pakkaðu upp) öllu innihaldi ZIP skráarinnar.

Til að pakka upp innihaldi ZIP-skrár, búðu til ZipFile-hlut með fyrstu breytuskránni í smíði sem slóð að núverandi ZIP-skrá og seinni breytuhaminn sem ‘r’, eins og í dæminu hér að ofan. Hægt er að sleppa stillingarrökum þar sem það er sjálfgefið „r“.

extractall() aðferð ZipFile hlutarins dregur út (afþjappar) allt innihald ZIP skráarinnar. Fyrsta röksemdin, slóð, tilgreinir slóð möppunnar sem á að draga út í. Ef því er sleppt verða skrárnar dregnar út í núverandi möppu.

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

ZIP skrá með lykilorði er hægt að draga út með því að tilgreina lykilorðið sem argument pwd fyrir extractall() aðferðina.

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

Veldu innihald ZIP skráarinnar og dragðu hana út.

Ef þú vilt taka upp og draga aðeins út ákveðnar skrár skaltu nota extract() aðferðina.

Fyrsta rifrildi útdráttar() aðferðarinnar er heiti skráarinnar sem á að draga út, og önnur rifrildislóð er slóð möppunnar sem á að draga út í. Ef slóðarfrumvarpinu er sleppt verður skráin dregin út í núverandi möppu. Nafn skráarinnar sem á að draga út ætti að innihalda slóðina að möppunni í ZIP skránni ef hún er geymd þar.

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

Eins og extractall() aðferðin, gerir extract() aðferðin þér einnig kleift að tilgreina lykilorð sem argument 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')