Nén thư mục (thư mục) thành zip hoặc tar bằng Python

Kinh doanh

Khi nén toàn bộ thư mục (thư mục) thành tệp zip bằng Python, bạn có thể sử dụng os.scandir () hoặc os.listdir () để tạo danh sách tệp và sử dụng mô-đun zipfile để nén chúng, nhưng dễ sử dụng hơn make_archive () của mô-đun shutil dễ dàng hơn.

Ngoài zip, các định dạng khác như tar cũng được hỗ trợ.

Để biết thêm thông tin về cách nén và giải nén các tập tin zip bằng mô-đun zipfile, vui lòng tham khảo bài viết sau.

Nén một thư mục (thư mục) thành một tệp zip:shutil.make_archive()

Đối số đầu tiên, base_name, chỉ định tên của tệp zip sẽ được tạo (không có phần mở rộng) và đối số thứ hai, format, chỉ định định dạng lưu trữ.

Phần sau có thể được chọn cho định dạng đối số.

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

Đối số thứ ba, root_dir, chỉ định đường dẫn của thư mục gốc của thư mục được nén và đối số thứ tư, base_dir, chỉ định đường dẫn của thư mục được nén liên quan đến root_dir. Cả hai đều được đặt thành thư mục hiện tại theo mặc định.

Nếu base_dir bị bỏ qua, toàn bộ root_dir sẽ được nén.

data/temp
Ví dụ, giả sử chúng ta có một thư mục với cấu trúc như sau.

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 được nén với các cài đặt ở trên bỏ qua base_dir sẽ được giải nén như sau.

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

Sau đó, nếu thư mục trong root_dir được chỉ định cho base_dir, thì phần sau sẽ được hiển thị.

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

New_shutil_sub.zip được nén với các cài đặt trên sẽ được giải nén như sau.

dir_sub
└── test_sub.txt