Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Zipping er en elegant måte å komprimere flere filer og kombinere dem til en enkelt. Dette sparer ikke bare lagringsplass, men også båndbredde når du overfører en fil over et nettverk. En av de beste funksjonene til zip er at den fungerer på alle større plattformer: Windows, Linux og Mac.

Zip bruker tapsfri komprimering slik at den beholder all data når den komprimeres og dekomprimeres. Du kan også kryptere og dekryptere zip-filene dine.

Med så mange funksjoner å utforske, oppdag hvordan du kan lese, zippe og pakke ut filer ved hjelp av Python zipfile-modulen.

Hva er zipfile-modulen?

Du kan bruke standard zipfile-modulen til å manipulere zip-filer ved hjelp av Python. Med denne modulen kan du åpne og lese zip-filer, lese metadataene deres, lage en zip-fil, komprimere den og pakke ut filer. Det er tre metoder for komprimering tilgjengelig: Deflate, Bzip2 og LZMA.

instagram viewer

En av tingene modulen mangler er muligheten til å håndtere multi-disk-filer, men den håndterer ZIP64-utvidelsen. Den kan også dekryptere zip-arkiver, men ikke kryptere dem. Ved å bruke zipfile-modulen kan du få zip-fil metadata som dato og klokkeslett for endring. Du kan også hente detaljer som operativsystemet som ble brukt til å lage filen, versjonen av zip og filstørrelsen i både komprimert og ukomprimert format.

Slik zipper du filer ved hjelp av Python

Du kan zippe flere filer i ett arkiv ved å bruke Pythons zipfile-modul. Importer Zipfil modul fra zip-fil pakken for å utføre de nødvendige zip-operasjonene. Importer også de os modul for å velge og lagre filer.

Definer en funksjon get_all_file_paths(). Den skal godta en katalogparameter som inneholder banen til mappen som inneholder filene som skal zippes.

Initialiser en tom liste som vil lagre listen over filbaner. Bruk en for-løkke for å få hele innholdet i målkatalogen ved å bruke os.walk() funksjon. Denne funksjonen henter filnavnene i et katalogtre ved å flytte langs det i en ovenfra-ned- eller en nedenfra-opp-tilnærming. For hver katalog returnerer funksjonen en tre-tuppel som inneholder root, dirs og filer.

Roten er en streng som inneholder hele banen til katalogen. Dirs-listen inkluderer alle underkataloger i katalogen. Fillisten inneholder alle filene som finnes i katalogen.

Inne i løkken, erklær en annen loop for å iterere over fillisten. Bruke os.path.join() funksjon for å kombinere navnet på katalogen med hvert filnavn for å lage en komplett bane. Deretter legger du til dette fullstendige filnavnet til listen du opprettet tidligere. Når denne operasjonen er ferdig, returnerer du listen over filbaner.

# importer de nødvendige modulene
fra zip-fil import Zipfil
import os

# lag en funksjon for å få alle filbanene
defget_all_file_paths(katalog):
# initialiserer tom liste for å lagre filstier
fil_stier = []

# naviger gjennom filene
tilrot, kataloger, filerios.gå(katalog):
for filnavn i filer:
# slå sammen roten og filnavnet for å lage en komplett filbane
filbane = os.bane.join (rot, filnavn)
filstier.legg til(filbane)

# returnerer alle filstier
komme tilbake filstier

Lagre banen til mappen som inneholder filene du vil zippe i en variabel kalt katalog. Ring funksjonen, get_all_file_paths() som du opprettet tidligere og lagre verdien den returnerer i filstier.

Vis en melding til brukeren for å fortelle dem at dette er filene som programmet vil zippe. Iterer over filene og vis navnene deres.

Gi navnet du vil at zip-filen skal ha sammen med spesifikasjonen om at programmet returnerer en skrivbar fil ved å bruke with-setningen for å håndtere unntak. Iterer over hver fil og bruk write()-funksjonen over den skrivbare filen til en zip-fil.

Når operasjonen er fullført, sender du ut en melding som forklarer at programmet zippet alle filene.

# bane til mappen du vil zippe
katalog = './pythonzip'

# kallefunksjon for å få alle filstier i katalogen
file_paths = get_all_file_paths (katalog)

# skriver ut listen over alle filer du vil zippe
skrive ut('Liste over filer som vil bli zippet:')

for filnavn i filstier:
skrive ut(filnavn)

# skriver filer til en zip-fil
med ZipFile('min_fil.zip', 'w') som glidelås:
# skriv hver fil en etter en
for fil i file_paths:
glidelås.skrive(fil)

skrive ut('Alle filer er zippet!')

Hvordan pakke ut filer ved hjelp av Python

Implementeringen av å pakke ut filer ved hjelp av zipfile-modulen er mye enklere. Importer zip-fil pakke fra Zipfil modul og lagre navnet på zip-filen du vil trekke ut i en variabel. Bruk with-setningen for å håndtere unntak og åpne filen du vil pakke ut i lesemodus. Bruke printdir() funksjon for å vise innholdsfortegnelsen til filene som finnes i zip.

Vis en fremdriftsmelding om at du pakker ut filene og bruk trekk ut alt() funksjon for å trekke ut innholdet i zip-filen til gjeldende arbeidskatalog. Alternativt kan du inkludere en baneparameter for å endre banen der programmet trekker ut filene.

Vis en melding ved hjelp av skrive ut erklæring om fullført operasjon.

# importere de nødvendige modulene
fra zip-fil import Zipfil

# send inn navnet på zip-filen du vil pakke ut
filnavn = "extract.zip"

# åpne zip-filen i lesemodus
med ZipFile (filnavn, 'r') som glidelås:
# vis innholdet i zip-filen
glidelås.printdir()

# trekke ut alle filene
skrive ut('Utdrag pågår...')
glidelås.trekk ut alt()
skrive ut('Alle filer er pakket ut!')

Mer om zip-filer

Zip-filer har fått mye popularitet og er i bruk i flere tiår nå. Populære nettsteder som GitHub og Google Drive lar deg laste ned en samling filer som et zip-arkiv. Zip-programmet komprimerer et sett med filer til en enkelt pakke. Dette er i motsetning til et verktøy som tar som pakker filer sammen, men ikke komprimerer dem.

Hvis du vil kryptere filene dine ved hjelp av en mer effektiv algoritme, er RAR-filer veien å gå. RAR bruker AES-128-algoritmen som er bedre enn deflate-algoritmen som brukes av zip-filer. Til syvende og sist, velg den som best dekker ditt behov.