Pag-compress ng isang direktoryo (folder) sa isang zip o tar sa Python

Negosyo

Kapag nag-compress ng isang buong direktoryo (folder) sa isang zip file sa Python, maaari mong gamitin ang os.scandir() o os.listdir() para gumawa ng listahan ng mga file at gamitin ang zipfile module para i-compress ang mga ito, ngunit mas madaling gamitin ang make_archive () ng shutil module ay mas madali.

Bilang karagdagan sa zip, sinusuportahan din ang iba pang mga format tulad ng tar.

Para sa karagdagang impormasyon sa pag-compress at pag-uncompress ng mga zip file gamit ang zipfile module, mangyaring sumangguni sa sumusunod na artikulo.

I-compress ang isang direktoryo (folder) sa isang zip file:shutil.make_archive()

Ang unang argumento, base_name, ay tumutukoy sa pangalan ng zip file na gagawin (nang walang extension), at ang pangalawang argumento, format, ay tumutukoy sa archive na format.

Maaaring piliin ang sumusunod para sa format ng argumento.

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

Ang ikatlong argumento, root_dir, ay tumutukoy sa landas ng root directory ng direktoryo na i-compress, at ang ikaapat na argumento, base_dir, ay tumutukoy sa path ng direktoryo na i-compress na may kaugnayan sa root_dir. Parehong nakatakda sa kasalukuyang direktoryo bilang default.

Kung ang base_dir ay tinanggal, ang buong root_dir ay mai-compress.

data/temp
Halimbawa, ipagpalagay na mayroon kaming isang direktoryo na may sumusunod na istraktura.

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

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

Ang new_shutil.zip na na-compress na may mga setting sa itaas na nag-aalis sa base_dir ay made-decompress bilang mga sumusunod.

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

Pagkatapos, kung ang direktoryo sa root_dir ay tinukoy para sa base_dir, ang sumusunod ay ipapakita.

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

Ang new_shutil_sub.zip na na-compress gamit ang mga setting sa itaas ay ide-decompress bilang mga sumusunod.

dir_sub
└── test_sub.txt