ضغط دليل (مجلد) في ملف مضغوط أو tar في بايثون

اعمال

عند ضغط مجلد (مجلد) بأكمله في ملف مضغوط في Python ، يمكنك استخدام os.scandir () أو os.listdir () لإنشاء قائمة بالملفات واستخدام وحدة zipfile لضغطها ، ولكن من الأسهل استخدامها يكون make_archive () الخاص بوحدة shutil أسهل.

بالإضافة إلى الرمز البريدي ، يتم أيضًا دعم التنسيقات الأخرى مثل القطران.

لمزيد من المعلومات حول ضغط الملفات المضغوطة وإلغاء ضغطها باستخدام وحدة zipfile ، يرجى الرجوع إلى المقالة التالية.

ضغط دليل (مجلد) في ملف مضغوط:shutil.make_archive()

تحدد الوسيطة الأولى ، base_name ، اسم الملف المضغوط الذي سيتم إنشاؤه (بدون ملحق) ، وتحدد الوسيطة الثانية ، التنسيق ، تنسيق الأرشيف.

يمكن تحديد ما يلي لتنسيق الوسيطة.

  • 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