zipfile til at komprimere og udpakke ZIP-filer i Python

Forretning

Zipfile-modulet i Python-standardbiblioteket kan bruges til at komprimere filer til ZIP-filer og til at udpakke ZIP-filer. Det er inkluderet i standardbiblioteket, så der kræves ingen yderligere installation.

Følgende indhold er forklaret.

  • Komprimering af flere filer i en ZIP-fil
  • Tilføj en ny fil til en eksisterende ZIP-fil
  • Komprimere en mappe til en ZIP-fil
  • Komprimeret i en ZIP-fil med en adgangskode
  • Kontroller indholdet af ZIP-filen.
  • Udpak (udpak) hele indholdet af ZIP-filen.
  • Vælg indholdet af ZIP-filen, og udpak den.

Komprimering af flere filer i en ZIP-fil

Opret et ZipFile-objekt, og brug write()-metoden til at tilføje de filer, du vil komprimere.

Hvis du vil oprette en ny ZIP-fil, skal du angive stien til den ZIP-fil, der skal oprettes, som det første argument i konstruktøren af ZipFile-objektet og det andet argument på følgende måde'w'

Desuden kan komprimeringsmetoden angives som det tredje argument.

  • zipfile.ZIP_STORED:Bare kombinere flere filer uden komprimering (standard)
  • zipfile.ZIP_DEFLATED:Normal ZIP-komprimering (zlib-modul påkrævet)
  • zipfile.ZIP_BZIP2:BZIP2-komprimering (bz2-modul påkrævet)
  • zipfile.ZIP_LZMA:LZMA-komprimering (lzma-modul påkrævet)

BZIP2 og LZMA har en højere komprimeringsgrad (kan komprimeres til en mindre størrelse), men den tid, der kræves til komprimering, er længere.

I write()-metoden skrives filen med det første argument filename til en ZIP-fil med det andet argument arcname. Hvis arcname udelades, anvendes filnavn som det er. arcname kan også angive en mappestruktur.

ZipFile-objektet skal lukkes med close()-metoden, men hvis du bruger with-anvisningen, lukkes det automatisk, når blokken er færdig.

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

Ved at angive compress_type-argumentet i write()-metoden er det også muligt at vælge komprimeringsmetoden for hver enkelt fil.

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

Tilføj en ny fil til en eksisterende ZIP-fil

Hvis du vil tilføje en ny fil til en eksisterende zip-fil, skal du angive det første argument i konstruktøren til stien til den eksisterende zip-fil, når du opretter ZipFile-objektet. Indstil også det andet argument mode som følger.'a'

Derefter skal du, som i eksemplet ovenfor, blot tilføje filen ved hjælp af write()-metoden.

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

Komprimere en mappe til en ZIP-fil

Hvis du ønsker at komprimere en hel mappe til en enkelt ZIP-fil, kan du bruge os.scandir() eller os.listdir() til at lave en liste over filer, men det er nemmere at bruge make_archive() i shutil-modulet.

Se følgende artikel.

Komprimeret i en ZIP-fil med en adgangskode

Zipfile-modulet giver dig ikke mulighed for at oprette passwordbeskyttede ZIP-filer. Hvis du ønsker at komprimere en fil til en passwordbeskyttet zip-fil, skal du bruge tredjepartsbiblioteket pyminizip.

Bemærk, at dekomprimering af password-beskyttede ZIP-filer kan foretages med zipfile-modulet (se nedenfor).

Kontroller indholdet af ZIP-filen.

Du kan kontrollere indholdet af en eksisterende ZIP-fil.

Opret et ZipFile-objekt ved at sætte det første argument file i konstruktøren til stien til den eksisterende zip-fil og det andet argument mode til 'r'. Argumentet mode kan udelades, da standardværdien er “r”.

Du kan bruge metoden namelist() for ZipFile-objektet til at få en liste over arkiverede filer.

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

Udpak (udpak) hele indholdet af ZIP-filen.

Hvis du vil udpakke indholdet af en ZIP-fil, skal du oprette et ZipFile-objekt med det første argument file i konstruktøren som stien til den eksisterende ZIP-fil og det andet argument mode som 'r', som i eksemplet ovenfor. Argumentet mode kan udelades, da det som standard er “r”.

Metoden extractall() i ZipFile-objektet udpakker (udpakker) hele indholdet af ZIP-filen. Det første argument, path, angiver stien til den mappe, der skal udpakkes til. Hvis det udelades, vil filerne blive udtrukket til den aktuelle mappe.

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

En ZIP-fil med en adgangskode kan udtrækkes ved at angive adgangskoden som argumentet pwd i metoden extractall().

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

Vælg indholdet af ZIP-filen, og udpak den.

Hvis du kun ønsker at udpakke og udpakke bestemte filer, skal du bruge metoden extract().

Det første argument i metoden extract() er navnet på den fil, der skal udpakkes, og det andet argument path er stien til den mappe, der skal udpakkes til. Hvis argumentet path udelades, vil filen blive udtrukket til den aktuelle mappe. Navnet på den fil, der skal udtrækkes, skal indeholde stien til mappen i ZIP-filen, hvis den er gemt der.

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

Ligesom metoden extractall() giver metoden extract() dig også mulighed for at angive en adgangskode som argumentet 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