Python’da bir dizini (klasörü) bir zip veya tar dosyasına sıkıştırmak

Python’da tüm bir dizini (klasörü) bir zip dosyasına sıkıştırırken, bir dosya listesi oluşturmak için os.scandir() veya os.listdir()’i kullanabilir ve bunları sıkıştırmak için zipfile modülünü kullanabilirsiniz, ancak kullanımı daha kolaydır. Shutil modülünün make_archive() işlevi daha kolaydır.

Zip’e ek olarak, tar gibi diğer biçimler de desteklenir.

Zip dosyası modülünü kullanarak zip dosyalarını sıkıştırma ve açma hakkında daha fazla bilgi için lütfen aşağıdaki makaleye bakın.

Bir dizini (klasörü) bir zip dosyasına sıkıştırın:shutil.make_archive()

İlk argüman, base_name, oluşturulacak zip dosyasının adını (uzantısız) belirtir ve ikinci argüman olan format, arşiv formatını belirtir.

Argüman formatı için aşağıdakiler seçilebilir.

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

Üçüncü argüman olan root_dir, sıkıştırılacak dizinin kök dizininin yolunu belirtir ve dördüncü argüman olan base_dir, sıkıştırılacak dizinin root_dir’e göre yolunu belirtir. Her ikisi de varsayılan olarak geçerli dizine ayarlanmıştır.

base_dir atlanırsa, root_dir’in tamamı sıkıştırılacaktır.

data/temp
Örneğin, aşağıdaki yapıya sahip bir dizinimiz olduğunu varsayalım.

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

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

base_dir hariç yukarıdaki ayarlarla sıkıştırılan new_shutil.zip dosyası aşağıdaki gibi açılır.

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

Daha sonra, base_dir için root_dir içindeki dizin belirtilmişse, aşağıdakiler gösterilecektir.

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

Yukarıdaki ayarlarla sıkıştırılmış new_shutil_sub.zip dosyası aşağıdaki gibi açılır.

dir_sub
└── test_sub.txt
Copied title and URL