Συμπίεση ενός καταλόγου (φακέλου) σε zip ή tar στην Python

Επιχείρηση

Κατά τη συμπίεση ενός ολόκληρου καταλόγου (φακέλου) σε ένα αρχείο zip στην Python, μπορείτε να χρησιμοποιήσετε την os.scandir() ή την os.listdir() για να δημιουργήσετε μια λίστα αρχείων και να χρησιμοποιήσετε την ενότητα zipfile για να τα συμπιέσετε, αλλά είναι πιο εύκολο να χρησιμοποιήσετε την make_archive () της ενότητας shutil είναι πιο εύκολο.

Εκτός από το zip, υποστηρίζονται και άλλες μορφές, όπως το tar.

Για περισσότερες πληροφορίες σχετικά με τη συμπίεση και την αποσυμπίεση αρχείων zip με τη χρήση της ενότητας zipfile, ανατρέξτε στο ακόλουθο άρθρο.

Συμπίεση ενός καταλόγου (φακέλου) σε αρχείο zip:shutil.make_archive()

Το πρώτο όρισμα, base_name, καθορίζει το όνομα του αρχείου zip που πρόκειται να δημιουργηθεί (χωρίς επέκταση) και το δεύτερο όρισμα, format, καθορίζει τη μορφή αρχειοθέτησης.

Για τη μορφή των επιχειρημάτων μπορούν να επιλεγούν τα εξής.

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

Το τρίτο όρισμα, root_dir, καθορίζει τη διαδρομή του ριζικού καταλόγου του καταλόγου που πρόκειται να συμπιεστεί και το τέταρτο όρισμα, base_dir, καθορίζει τη διαδρομή του καταλόγου που πρόκειται να συμπιεστεί σε σχέση με το root_dir. Και τα δύο ορίζονται στον τρέχοντα κατάλογο από προεπιλογή.

Αν το base_dir παραλειφθεί, θα συμπιεστεί ολόκληρο το root_dir.

data/temp
Για παράδειγμα, ας υποθέσουμε ότι έχουμε έναν κατάλογο με την ακόλουθη δομή.

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 που έχει συμπιεστεί με τις παραπάνω ρυθμίσεις παραλείποντας το base_dir θα αποσυμπιεστεί ως εξής.

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

Στη συνέχεια, αν ο κατάλογος στο root_dir καθοριστεί ως base_dir, θα εμφανιστούν τα εξής.

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

Το αρχείο new_shutil_sub.zip που έχει συμπιεστεί με τις παραπάνω ρυθμίσεις θα αποσυμπιεστεί ως εξής.

dir_sub
└── test_sub.txt