บีบอัดไดเร็กทอรี (โฟลเดอร์) ลงใน zip หรือ tar ใน Python

ธุรกิจ

เมื่อบีบอัดทั้งไดเร็กทอรี (โฟลเดอร์) ลงในไฟล์ zip ใน Python คุณสามารถใช้ os.scandir() หรือ os.listdir() เพื่อสร้างรายการไฟล์และใช้โมดูล zipfile เพื่อบีบอัดไฟล์เหล่านั้น แต่ใช้งานง่ายกว่า make_archive () ของโมดูล shutil นั้นง่ายกว่า

นอกจากไฟล์ zip แล้ว ยังรองรับรูปแบบอื่นๆ เช่น tar

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการบีบอัดและคลายการบีบอัดไฟล์ zip โดยใช้โมดูล zipfile โปรดดูบทความต่อไปนี้

บีบอัดไดเร็กทอรี (โฟลเดอร์) ลงในไฟล์ zip:shutil.make_archive()

อาร์กิวเมนต์แรก base_name ระบุชื่อของไฟล์ zip ที่จะสร้าง (ไม่มีนามสกุล) และอาร์กิวเมนต์ที่สอง รูปแบบ ระบุรูปแบบไฟล์เก็บถาวร

ต่อไปนี้สามารถเลือกได้สำหรับรูปแบบอาร์กิวเมนต์

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

อาร์กิวเมนต์ที่สาม root_dir ระบุพาธของไดเร็กทอรี root ของไดเร็กทอรีที่จะบีบอัด และอาร์กิวเมนต์ที่สี่ 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
Copied title and URL