Python стандартты кітапханасының zipfile модулі файлдарды ZIP файлдарына қысу және ZIP файлдарын ашу үшін пайдаланылуы мүмкін. Ол стандартты кітапханаға енгізілген, сондықтан қосымша орнату қажет емес.
Келесі мазмұндар түсіндіріледі.
- Бірнеше файлды ZIP файлына қысыңыз
- Жаңа файлды бұрыннан бар ZIP файлына қосыңыз
- Каталогты (қалтаны) ZIP файлына қысыңыз
- Құпия сөзбен ZIP файлына қысылған
- ZIP файлының мазмұнын тексеріңіз.
- ZIP файлының барлық мазмұнын шығарып алыңыз (орамаңыз).
- ZIP файлының мазмұнын таңдап, оны шығарып алыңыз.
Бірнеше файлды ZIP файлына қысыңыз
ZipFile нысанын жасаңыз және қысқыңыз келетін файлдарды қосу үшін write() әдісін пайдаланыңыз.
Жаңа ZIP файлын жасау үшін ZipFile нысаны конструкторының бірінші аргументі ретінде жасалатын ZIP файлының жолын, ал екінші аргументті келесідей көрсетіңіз.w'
Сонымен қатар, қысу әдісін үшінші аргумент ретінде көрсетуге болады.
zipfile.ZIP_STORED
:Бірнеше файлды қысусыз біріктіру (әдепкі)zipfile.ZIP_DEFLATED
:Қалыпты ZIP қысу (zlib модулі қажет)zipfile.ZIP_BZIP2
:BZIP2 қысу (bz2 модулі қажет)zipfile.ZIP_LZMA
:LZMA қысу (lzma модулі қажет)
BZIP2 және LZMA жоғарырақ қысу коэффициентіне ие (кішірек өлшемге дейін қысуға болады), бірақ қысу үшін қажет уақыт ұзағырақ.
write() әдісінде бірінші аргумент файл аты бар файл екінші аргумент arcname бар ZIP файлына жазылады. Arcname көрсетіліп қалса, файл атауы сол күйінде пайдаланылады. arcname сонымен қатар каталог құрылымын көрсете алады.
ZipFile нысанын close() әдісімен жабу керек, бірақ with операторын пайдалансаңыз, блок аяқталғаннан кейін ол автоматты түрде жабылады.
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() әдісінің compress_type аргументін көрсету арқылы әрбір файл үшін қысу әдісін таңдауға болады.
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')
Жаңа файлды бұрыннан бар ZIP файлына қосыңыз
Бар zip файлына жаңа файлды қосу үшін ZipFile нысанын жасау кезінде конструктордың бірінші аргументін бар zip файлының жолына орнатыңыз. Сондай-ақ, екінші аргумент режимін келесідей орнатыңыз.a'
Содан кейін, жоғарыдағы мысалдағыдай, файлды write() әдісі арқылы қосыңыз.
with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
existing_zip.write('data/temp/test4.txt', arcname='test4.txt')
Каталогты (қалтаны) ZIP файлына қысыңыз
Бүкіл каталогты (қалтаны) бір ZIP файлына қысқыңыз келсе, файлдар тізімін жасау үшін os.scandir() немесе os.listdir() пайдалана аласыз, бірақ shutil ішінде make_archive() пайдалану оңайырақ. модуль.
Келесі мақаланы қараңыз.
- Қатысты мақалалар:Python тілінде zip немесе tar файлына каталогты (қалтаны) қысу
Құпия сөзбен ZIP файлына қысылған
Zipfile модулі құпия сөзбен қорғалған ZIP файлдарын жасауға мүмкіндік бермейді. Егер файлды құпия сөзбен қорғалған zip файлына қысқыңыз келсе, үшінші тараптың pyminizip кітапханасын пайдаланыңыз.
Құпия сөзбен қорғалған ZIP файлдарын ашуды zipfile модулімен жасауға болатынын ескеріңіз (төменде қараңыз).
ZIP файлының мазмұнын тексеріңіз.
Бар ZIP файлының мазмұнын тексеруге болады.
Конструктордағы бірінші аргумент файлын бар zip файлының жолына және екінші аргумент режимін ‘r’ етіп орнату арқылы ZipFile нысанын жасаңыз. Режим аргументін алып тастауға болады, себебі әдепкі мән ‘r’.
Мұрағатталған файлдар тізімін алу үшін ZipFile нысанының namelist() әдісін пайдалануға болады.
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 файлының барлық мазмұнын шығарып алыңыз (орамаңыз).
ZIP файлының мазмұнын ашу үшін, жоғарыдағы мысалдағыдай бар ZIP файлына жол ретінде конструктордағы бірінші аргумент файлы және «r» ретінде екінші аргумент режимі бар ZipFile нысанын жасаңыз. Режим аргументін алып тастауға болады, себебі ол әдепкі бойынша «r» болады.
ZipFile нысанының extractall() әдісі ZIP файлының бүкіл мазмұнын шығарады (сығымды босатады). Бірінші аргумент, жол, шығарылатын каталогтың жолын көрсетеді. Егер ол алынып тасталса, файлдар ағымдағы каталогқа шығарылады.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extractall('data/temp/ext')
Құпия сөзі бар ZIP файлын extractall() әдісінің pwd аргументі ретінде құпия сөзді көрсету арқылы шығаруға болады.
with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
pass_zip.extractall('data/temp/ext_pass', pwd='password')
ZIP файлының мазмұнын таңдап, оны шығарып алыңыз.
Тек белгілі бір файлдарды қаптамадан шығарып, шығарып алғыңыз келсе, extract() әдісін пайдаланыңыз.
Extract() әдісінің бірінші аргументі – шығарылатын файлдың аты, ал екінші аргумент жолы – шығарылатын каталогтың жолы. Жол аргументі түсірілсе, файл ағымдағы каталогқа шығарылады. Шығарылатын файлдың атауы, егер ол сол жерде сақталған болса, ZIP файлындағы каталогқа апаратын жолды қамтуы керек.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extract('test1.txt', 'data/temp/ext2')
Extractall() әдісі сияқты, extract() әдісі де pwd аргументі ретінде құпия сөзді көрсетуге мүмкіндік береді.
with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')