Python-da ZIP fayllarını sıxışdırmaq və açmaq üçün zipfile

Biznes

Python standart kitabxanasının zipfayl modulu faylları ZIP-lərə sıxışdırmaq və ZIP fayllarını açmaq üçün istifadə edilə bilər. Standart kitabxanaya daxildir, ona görə də əlavə quraşdırma tələb olunmur.

Aşağıdakı məzmunlar izah olunur.

  • Birdən çox faylı ZIP faylına sıxışdırın
  • Mövcud ZIP faylına yeni fayl əlavə edin
  • Bir qovluğu (qovluğu) ZIP faylına sıxın
  • Şifrə ilə ZIP faylına sıxılmışdır
  • ZIP faylının məzmununu yoxlayın.
  • ZIP faylının bütün məzmununu çıxarın (açın).
  • ZIP faylının məzmununu seçin və çıxarın.

Birdən çox faylı ZIP faylına sıxışdırın

ZipFile obyekti yaradın və sıxmaq istədiyiniz faylları əlavə etmək üçün write() metodundan istifadə edin.

Yeni ZIP faylı yaratmaq üçün yaradılacaq ZIP faylının yolunu ZipFile obyektinin konstruktorunun birinci arqumenti kimi, ikinci arqumenti isə aşağıdakı kimi göstərin.w'

Bundan əlavə, sıxılma üsulu üçüncü arqument kimi göstərilə bilər.

  • zipfile.ZIP_STORED:Sadəcə birdən çox faylı sıxılmadan birləşdirin (defolt)
  • zipfile.ZIP_DEFLATED:Normal ZIP sıxılma (zlib modulu tələb olunur)
  • zipfile.ZIP_BZIP2:BZIP2 sıxılma (bz2 modulu tələb olunur)
  • zipfile.ZIP_LZMA:LZMA sıxılma (lzma modulu tələb olunur)

BZIP2 və LZMA daha yüksək sıxılma nisbətinə malikdir (daha kiçik ölçüdə sıxıla bilər), lakin sıxılma üçün tələb olunan vaxt daha uzundur.

write() metodunda birinci arqument fayl adı olan fayl ikinci arqument arcname ilə ZIP faylına yazılır. Arcname buraxılıbsa, fayl adı olduğu kimi istifadə olunur. arcname həmçinin kataloq strukturunu təyin edə bilər.

ZipFile obyekti close() metodu ilə bağlanmalıdır, lakin siz with ifadəsindən istifadə etsəniz, blok başa çatdıqdan sonra o, avtomatik bağlanacaq.

import zipfile

with zipfile.ZipFile('data/temp/new_comp.zip', 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt')
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

write() metodunun compress_type arqumentini təyin etməklə, həmçinin hər bir fayl üçün sıxılma metodunu seçmək mümkündür.

with zipfile.ZipFile('data/temp/new_comp_single.zip', 'w') as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt', compress_type=zipfile.ZIP_DEFLATED)
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

Mövcud ZIP faylına yeni fayl əlavə edin

Mövcud zip faylına yeni fayl əlavə etmək üçün ZipFile obyektini yaratarkən konstruktorun birinci arqumentini mövcud zip faylının yoluna təyin edin. Həmçinin, ikinci arqument rejimini aşağıdakı kimi qurun.a'

Sonra, yuxarıdakı nümunədə olduğu kimi, sadəcə write() metodundan istifadə edərək faylı əlavə edin.

with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
    existing_zip.write('data/temp/test4.txt', arcname='test4.txt')

Bir qovluğu (qovluğu) ZIP faylına sıxın

Əgər siz bütün qovluğu (qovluğu) tək ZIP faylına sıxışdırmaq istəyirsinizsə, os.scandir() və ya os.listdir() istifadə edərək faylların siyahısını yarada bilərsiniz, lakin shutildə make_archive() funksiyasından istifadə etmək daha asandır. modul.

Aşağıdakı məqaləyə baxın.

Şifrə ilə ZIP faylına sıxılmışdır

Zipfile modulu parolla qorunan ZIP-lər yaratmağa imkan vermir. Əgər faylı parolla qorunan zip faylına sıxışdırmaq istəyirsinizsə, üçüncü tərəfin pyminizip kitabxanasından istifadə edin.

Qeyd edək ki, parolla qorunan ZIP-lərin açılması zipfile modulu ilə həyata keçirilə bilər (aşağıya bax).

ZIP faylının məzmununu yoxlayın.

Siz mövcud ZIP faylının məzmununu yoxlaya bilərsiniz.

Konstruktorda ilk arqument faylını mövcud zip faylının yoluna, ikinci arqument rejimini isə ‘r’ olaraq təyin edərək ZipFile obyekti yaradın. Defolt ‘r’ olduğundan rejim arqumenti buraxıla bilər.

Arxivlənmiş faylların siyahısını əldə etmək üçün ZipFile obyektinin namelist() metodundan istifadə edə bilərsiniz.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    print(existing_zip.namelist())
# ['test1.txt', 'zipdir/test2.txt', 'zipdir/sub_dir/test3.txt', 'test4.txt']

ZIP faylının bütün məzmununu çıxarın (açın).

ZIP faylının məzmununu açmaq üçün yuxarıdakı misalda olduğu kimi konstruktorda mövcud ZIP faylına yol kimi birinci arqument faylı və ‘r’ kimi ikinci arqument rejimi ilə ZipFile obyekti yaradın. Rejim arqumenti standart olaraq ‘r’ olduğu üçün buraxıla bilər.

ZipFile obyektinin extractall() metodu ZIP faylının bütün məzmununu çıxarır (sıxışdırır). Birinci arqument, yol, çıxarış üçün kataloq yolunu müəyyən edir. Əgər buraxılıbsa, fayllar cari qovluğa çıxarılacaq.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extractall('data/temp/ext')

Parollu ZIP faylı, parolu extractall() metodunun pwd arqumenti kimi göstərməklə çıxarıla bilər.

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extractall('data/temp/ext_pass', pwd='password')

ZIP faylının məzmununu seçin və çıxarın.

Yalnız müəyyən faylları paketdən çıxarmaq və çıxarmaq istəyirsinizsə, extract() metodundan istifadə edin.

Extract() metodunun birinci arqumenti çıxarılacaq faylın adı, ikinci arqument yolu isə çıxarılacaq kataloqun yoludur. Yol arqumenti buraxılıbsa, fayl cari qovluğa çıxarılacaq. Çıxarılacaq faylın adı, əgər orada saxlanılırsa, ZIP faylındakı qovluğa gedən yolu ehtiva etməlidir.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extract('test1.txt', 'data/temp/ext2')

Extractall() metodu kimi, extract() metodu da pwd arqumenti kimi parol təyin etməyə imkan verir.

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')
Copied title and URL