Komprimering af en mappe (mappe) til en zip- eller tar-fil i Python

Forretning

Når du komprimerer en hel mappe (folder) til en zip-fil i Python, kan du bruge os.scandir() eller os.listdir() til at oprette en liste over filer og bruge zipfile-modulet til at komprimere dem, men det er nemmere at bruge make_archive () i shutil-modulet er nemmere.

Ud over zip understøttes også andre formater som tar.

Du kan finde flere oplysninger om komprimering og udpakning af zip-filer ved hjælp af zipfile-modulet i følgende artikel.

Komprimere en mappe til en zip-fil:shutil.make_archive()

Det første argument, base_name, angiver navnet på den zip-fil, der skal oprettes (uden udvidelse), og det andet argument, format, angiver arkivformatet.

Følgende kan vælges som argumentformat.

  • 'zip'
  • 'tar'
  • 'gztar'
  • 'bztar'
  • 'xztar'

Det tredje argument, root_dir, angiver stien til rodmappen for den mappe, der skal komprimeres, og det fjerde argument, base_dir, angiver stien til den mappe, der skal komprimeres i forhold til root_dir. Begge er som standard sat til den aktuelle mappe.

Hvis base_dir udelades, vil hele root_dir blive komprimeret.

data/temp
Lad os f.eks. antage, at vi har en mappe med følgende struktur.

dir
├── dir_sub
   └── test_sub.txt
└── test.txt
import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

New_shutil.zip komprimeret med ovenstående indstillinger uden base_dir vil blive dekomprimeret på følgende måde.

new_shutil
├── dir_sub
   └── test_sub.txt
└── test.txt

Hvis mappen i root_dir er angivet som base_dir, vil følgende blive vist.

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

New_shutil_sub.zip, der er komprimeret med ovenstående indstillinger, vil blive dekomprimeret på følgende måde.

dir_sub
└── test_sub.txt