zipfile ku pelên ZIP-ê di Python de berhev bike û nehêle

Dikan

Modula zipfile ya pirtûkxaneya standard ya Python dikare were bikar anîn da ku pelan li ZIP-an bitepisîne û pelên ZIP-ê jihevde bike. Ew di pirtûkxaneya standard de cih digire, ji ber vê yekê sazkirina zêde ne hewce ye.

Naveroka jêrîn têne ravekirin.

  • Gelek pelan di pelek ZIP-ê de tevlihev bikin
  • Pelek nû li pelek ZIP ya heyî zêde bikin
  • Peldankek (peldank) di pelek ZIP de bicivîne
  • Bi şîfreyek di pelek ZIP-ê de hatî berhev kirin
  • Naveroka pelê ZIP kontrol bikin.
  • Tevahiya naveroka pelê ZIP derxînin (vekin).
  • Naveroka pelê ZIP hilbijêrin û jê derxin.

Gelek pelan di pelek ZIP-ê de tevlihev bikin

Tiştek ZipFile biafirînin û rêbaza nivîsandinê () bikar bînin da ku pelên ku hûn dixwazin bişkînin zêde bikin.

Ji bo afirandina pelê ZIP-ya nû, rêça pelê ZIP-ê ku wekî argumana yekem a çêkerê tiştê ZipFile were afirandin, û argumana duyemîn wekî jêrîn diyar bikin.w'

Wekî din, rêbaza berhevkirinê dikare wekî argumana sêyemîn were destnîşan kirin.

  • zipfile.ZIP_STORED:Tenê gelek pelan bêyî pelçiqandinê bi hev re bikin (xwerû)
  • zipfile.ZIP_DEFLATED:Tevlihevkirina ZIP ya normal (modula zlib hewce ye)
  • zipfile.ZIP_BZIP2:Tevlihevkirina BZIP2 (modula bz2 hewce ye)
  • zipfile.ZIP_LZMA:Kompresyona LZMA (modula lzma hewce ye)

BZIP2 û LZMA xwedan rêjeyek pêvekirinê ya bilindtir in (dikare bi mezinahîyek piçûktir were pelixandin), lê dema ku ji bo berhevkirinê hewce dike dirêjtir e.

Di rêbaza nivîsandinê () de, pelê bi navê pelê argûmana yekem li pelê ZIP bi arcnavê argumana duyemîn tê nivîsandin. Ger navê arc were jêbirin, navê pelê wekî ku tê bikar anîn. arcname dikare avahiyek pelrêça jî diyar bike.

Tişta ZipFile pêdivî ye ku bi rêbaza close() were girtin, lê heke hûn daxuyaniya with bikar bînin, dema ku bloq qediya ew ê bixweber were girtin.

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

Bi diyarkirina argumana compress_type ya rêbaza binivîse()-ê, di heman demê de gengaz e ku meriv ji bo her pelê rêbaza berhevkirinê hilbijêrin.

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

Pelek nû li pelek ZIP ya heyî zêde bikin

Ji bo ku pelek nû li pelê zip-a heyî zêde bikin, dema ku hêmana ZipFile diafirînin argumana yekem a çêker li ser riya pelê zip-a heyî bicîh bikin. Di heman demê de, moda argumana duyemîn wekî jêrîn saz bikin.a'

Dûv re, wekî mînaka li jor, tenê pelê bi karanîna rêbaza nivîsandinê () lê zêde bike.

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

Peldankek (peldank) di pelek ZIP de bicivîne

Heke hûn dixwazin pelrêçek tevahî (peldank) di pelek ZIP ya yekane de tevlihev bikin, hûn dikarin os.scandir() an os.listdir() bikar bînin da ku navnîşek pelan çêbikin, lê karanîna make_archive() di shutilê de hêsantir e. module.

Gotara jêrîn bibînin.

Bi şîfreyek di pelek ZIP-ê de hatî berhev kirin

Modula zipfile destûrê nade ku hûn ZIP-yên parastî bi şîfreyê biafirînin. Heke hûn dixwazin pelek di pelek zip-a parastî ya şîfreyê de tevlihev bikin, pirtûkxaneya partiya sêyemîn pyminizip bikar bînin.

Bala xwe bidinê ku vekêşana ZIP-yên parastî bi şîfreyê dikare bi modula zipfile re were kirin (li jêr binêre).

Naveroka pelê ZIP kontrol bikin.

Hûn dikarin naveroka pelê ZIP-ya heyî kontrol bikin.

Tiştek ZipFile biafirînin ku pela argumana yekem a di çêker de li ser riya pelê zip-a heyî û moda argumana duyemîn jî li ‘r’ veqetînin. Argumenta modê dikare were derxistin ji ber ku xwerû ‘r’ e.

Hûn dikarin rêbaza namelist() ya objekta ZipFile bikar bînin da ku navnîşek pelên arşîvkirî bistînin.

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

Tevahiya naveroka pelê ZIP derxînin (vekin).

Ji bo vekirina naveroka pelê ZIP, bi pela argumana yekem a di çêkerê de wekî riya pelê ZIP-ya heyî û moda argumana duyemîn wekî ‘r’, wekî mînaka li jor, tiştek ZipFile biafirînin. Argumenta modê dikare ji holê were rakirin ji ber ku ew wekî ‘r’ vedihewîne.

Rêbaza extractall() ya tişta ZipFile tevahiya naveroka pelê ZIP derdixe (jihevde dike). Argumana yekem, rê, riya pelrêça ku jê tê derxistin diyar dike. Ger ew ji holê were rakirin, dê pelên peldanka heyî werin derxistin.

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

Pelê ZIP bi şîfreyek dikare bi destnîşankirina şîfreyê wekî argumana pwd ya rêbaza extractall() were derxistin.

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

Naveroka pelê ZIP hilbijêrin û jê derxin.

Heke hûn dixwazin tenê hin pelan vekin û derxin, rêbaza ekstrakt() bikar bînin.

Argumana yekem a rêbaza derxistinê () navê pelê ye ku jê tê derxistin, û argûmana duyemîn riya pelrêça ku jê tê derxistin e. Ger argûmana rê ji holê rabe, dê pel ji pelrêça heyî were derxistin. Navê pelê ku were derxistin ger li wir were hilanîn divê rêça pelrêça di pelê ZIP de hebe.

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

Mîna rêbaza extractall()-ê, rêbaza extract() jî dihêle hûn şîfreyek wekî argumana pwd destnîşan bikin.

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')