Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Stiskanje je eleganten način stiskanja več datotek in njihovega združevanja v eno. To ne prihrani le prostora za shranjevanje, temveč tudi pasovno širino pri prenosu datoteke prek omrežja. Ena najboljših lastnosti zip je, da deluje na vseh glavnih platformah: Windows, Linux in Mac.

Zip uporablja stiskanje brez izgube, tako da ohrani vse podatke, ko jih stisne in razpakira. Datoteke zip lahko tudi šifrirate in dešifrirate.

S toliko funkcijami, ki jih morate raziskati, odkrijte, kako lahko berete, stisnete in razpakirate datoteke z modulom Python zipfile.

Kaj je modul zipfile?

Za obdelavo datotek zip s Pythonom lahko uporabite standardni modul zipfile. S tem modulom lahko odpirate in berete datoteke zip, berete njihove metapodatke, ustvarite datoteko zip, jo stisnete in razpakirate datoteke. Na voljo so trije načini stiskanja: Deflate, Bzip2 in LZMA.

instagram viewer

Ena od stvari, ki modulu manjka, je zmožnost obravnavanja datotek z več diski, vendar obravnava razširitev ZIP64. Lahko tudi dešifrira arhive zip, ne pa jih šifrira. Z uporabo modula zipfile lahko dobite metapodatke datoteke zip, kot sta datum in čas spremembe. Pridobite lahko tudi podrobnosti, kot je operacijski sistem, uporabljen za ustvarjanje datoteke, različica zip in velikost datoteke v stisnjeni in nestisnjeni obliki.

Kako stisniti datoteke z uporabo Pythona

S Pythonovim modulom zipfile lahko stisnete več datotek v en arhiv. Uvozite ZipFile modul iz zipfile paket za izvajanje zahtevanih operacij zip. Tudi uvoz the os modul za izbiro in shranjevanje datotek.

Definirajte funkcijo get_all_file_paths(). Sprejeti mora parameter imenika, ki vsebuje pot do mape z datotekami za zip.

Inicializirajte prazen seznam, ki bo shranil seznam poti datotek. Uporabite zanko for, da dobite celotno vsebino ciljnega imenika z uporabo os.walk() funkcijo. Ta funkcija pridobi imena datotek v drevesu imenikov tako, da se po njem premika po pristopu od zgoraj navzdol ali od spodaj navzgor. Za vsak imenik funkcija vrne trojček, ki vsebuje koren, imenike in datoteke.

Koren je niz, ki vsebuje celotno pot do imenika. Seznam imenikov vključuje vse podimenike v imeniku. Seznam datotek vsebuje vse datoteke v imeniku.

Znotraj zanke deklarirajte drugo zanko za ponavljanje po seznamu datotek. Uporabi os.path.join() funkcijo za združevanje imena imenika z vsakim imenom datoteke, da ustvarite celotno pot. Nato pripnite to celotno ime datoteke seznamu, ki ste ga ustvarili prej. Ko je ta operacija končana, vrnite seznam poti datotek.

# uvozite zahtevane module
od zipfile uvoz ZipFile
uvoz os

# ustvarite funkcijo za pridobitev vseh poti do datotek
defget_all_file_paths(imenik):
# inicializacija praznega seznama za shranjevanje poti datotek
datoteke_poti = []

# pomikanje po datotekah
zakorenina, imeniki, datotekevos.hoditi(imenik):
za ime datoteke v datotekah:
# združite koren in ime datoteke, da ustvarite celotno pot do datoteke
filepath = os.path.join (root, ime datoteke)
poti_datotek.priložiti(pot do datoteke)

# vrne vse poti datotek
vrnitev poti_datotek

Shranite pot do mape, ki vsebuje datoteke, ki jih želite stisniti, v spremenljivko, imenovano imenik. Pokličite funkcijo, get_all_file_paths() ki ste ga ustvarili prej, in shranite vrednost, ki jo vrne poti_datotek.

Pokažite sporočilo uporabniku, da bo vedel, da so to datoteke, ki jih bo program stisnil. Preglejte datoteke in prikažite njihova imena.

Posredujte ime, ki ga želite, da ima vaša datoteka zip, skupaj s specifikacijo, da program vrne zapisljivo datoteko z uporabo stavka with za obravnavanje izjem. Preglejte vsako datoteko in uporabite funkcijo write() nad zapisljivo datoteko v datoteko zip.

Ko je operacija končana, izpišite sporočilo, ki pojasnjuje, da je program uspešno stisnil vse datoteke.

# pot do mape, ki jo želite stisniti
imenik = './pythonzip'

# klicna funkcija za pridobitev vseh poti datotek v imeniku
file_paths = get_all_file_paths (imenik)

# tiskanje seznama vseh datotek, ki jih želite stisniti
tiskanje('Seznam datotek, ki bodo stisnjene:')

za file_name v file_paths:
tiskanje(Ime datoteke)

# pisanje datotek v datoteko zip
z ZipFile('moja_datoteka.zip', 'w') kot zip:
# napišite vsako datoteko eno za drugo
za datoteko v file_paths:
zip.piši(mapa)

tiskanje('Vse datoteke so stisnjene!')

Kako razpakirati datoteke z uporabo Pythona

Implementacija razpakiranja datotek z uporabo modula zipfile je veliko lažja. Uvozite zipfile paket od ZipFile modul in shranite ime datoteke zip, ki jo želite ekstrahirati, v spremenljivko. Uporabite stavek with za obravnavanje izjem in odprite datoteko, ki jo želite ekstrahirati, v načinu branja. Uporabi printdir() funkcijo za prikaz kazala vsebine datotek v zip.

Prikažite sporočilo o napredku, da ekstrahirate datoteke, in uporabite izvleček() funkcijo za ekstrahiranje vsebine datoteke zip v trenutni delovni imenik. Druga možnost je, da vključite parameter poti, da spremenite pot, kjer program ekstrahira datoteke.

Prikažite sporočilo z uporabo tiskanje izjava o zaključku operacije.

# uvoz zahtevanih modulov
od zipfile uvoz ZipFile

# posredujte ime datoteke zip, ki jo želite ekstrahirati
ime_datoteke = "extract.zip"

# odpiranje datoteke zip v načinu branja
z ZipFile (ime_datoteke, 'r') kot zip:
# prikaz vsebine datoteke zip
zip.printdir()

# ekstrahiranje vseh datotek
tiskanje('Izvleček v teku ...')
zip.extractall()
tiskanje('Vse datoteke so ekstrahirane!')

Več o datotekah Zip

Datoteke zip so pridobile veliko popularnost in se uporabljajo že desetletja. Priljubljena spletna mesta, kot sta GitHub in Google Drive, vam omogočajo prenos zbirke datotek kot arhiv zip. Program zip stisne niz datotek v en paket. To je v nasprotju z orodjem, kot je tar, ki pakira datoteke skupaj, vendar jih ne stisne.

Če želite svoje datoteke šifrirati z učinkovitejšim algoritmom, so datoteke RAR prava pot. RAR uporablja algoritem AES-128, ki je boljši od algoritma deflate, ki ga uporabljajo datoteke zip. Navsezadnje izberite tistega, ki najbolje ustreza vašim potrebam.