Komprimieren eines Verzeichnisses (Ordners) in ein zip- oder tar-Format in Python

Geschäft

Beim Komprimieren eines ganzen Verzeichnisses (Ordners) in eine Zip-Datei in Python, können Sie os.scandir() oder os.listdir() verwenden, um eine Liste von Dateien zu erstellen und das zipfile-Modul zu verwenden, um sie zu komprimieren, aber es ist einfacher, die make_archive () des shutil-Moduls zu verwenden ist einfacher.

Neben zip werden auch andere Formate wie tar unterstützt.

Weitere Informationen zum Komprimieren und Dekomprimieren von Zip-Dateien mit dem zipfile-Modul finden Sie in dem folgenden Artikel.

Komprimieren eines Verzeichnisses (Ordners) in eine Zip-Datei:shutil.make_archive()

Das erste Argument, base_name, gibt den Namen der zu erstellenden Zip-Datei an (ohne Erweiterung), und das zweite Argument, format, gibt das Archivformat an.

Für das Argumentenformat kann Folgendes ausgewählt werden.

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

Das dritte Argument, root_dir, gibt den Pfad des Stammverzeichnisses des zu komprimierenden Verzeichnisses an, und das vierte Argument, base_dir, gibt den Pfad des zu komprimierenden Verzeichnisses relativ zu root_dir an. Beide werden standardmäßig auf das aktuelle Verzeichnis gesetzt.

Wenn base_dir weggelassen wird, wird das gesamte root_dir komprimiert.

data/temp
Nehmen wir zum Beispiel an, wir haben ein Verzeichnis mit der folgenden Struktur.

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

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

Die mit den obigen Einstellungen komprimierte Datei new_shutil.zip, bei der das base_dir weggelassen wurde, wird wie folgt dekomprimiert.

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

Wenn dann das Verzeichnis in root_dir für base_dir angegeben wird, wird Folgendes angezeigt.

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

Die mit den obigen Einstellungen komprimierte Datei new_shutil_sub.zip wird wie folgt dekomprimiert.

dir_sub
└── test_sub.txt
Copied title and URL