ម៉ូឌុល zipfile នៃបណ្ណាល័យស្តង់ដារ Python អាចត្រូវបានប្រើដើម្បីបង្ហាប់ឯកសារចូលទៅក្នុង ZIP និងពន្លាឯកសារ ZIP ។ វាត្រូវបានរួមបញ្ចូលនៅក្នុងបណ្ណាល័យស្តង់ដារ ដូច្នេះមិនចាំបាច់ដំឡើងបន្ថែមទេ។
ខ្លឹមសារខាងក្រោមត្រូវបានពន្យល់។
- បង្រួមឯកសារជាច្រើនទៅក្នុងឯកសារ ZIP
- បន្ថែមឯកសារថ្មីទៅឯកសារ ZIP ដែលមានស្រាប់
- បង្រួមថតឯកសារ (ថតឯកសារ) ទៅក្នុងឯកសារ ZIP
- បានបង្ហាប់ទៅក្នុងឯកសារ ZIP ដែលមានពាក្យសម្ងាត់
- ពិនិត្យមើលមាតិកានៃឯកសារ ZIP ។
- ស្រង់ចេញ (ពន្លា) មាតិកាទាំងមូលនៃឯកសារ ZIP ។
- ជ្រើសរើសមាតិកានៃឯកសារ ZIP ហើយស្រង់វាចេញ។
បង្រួមឯកសារជាច្រើនទៅក្នុងឯកសារ ZIP
បង្កើតវត្ថុ ZipFile ហើយប្រើវិធីសាស្ត្រ write() ដើម្បីបន្ថែមឯកសារដែលអ្នកចង់បង្ហាប់។
ដើម្បីបង្កើតឯកសារ ZIP ថ្មី បញ្ជាក់ផ្លូវនៃឯកសារ ZIP ដែលត្រូវបង្កើតជាអាគុយម៉ង់ទីមួយនៃ constructor នៃ ZipFile object ហើយអាគុយម៉ង់ទីពីរដូចខាងក្រោមw'
លើសពីនេះទៀតវិធីសាស្ត្របង្ហាប់អាចត្រូវបានបញ្ជាក់ជាអាគុយម៉ង់ទីបី។
zipfile.ZIP_STORED
:គ្រាន់តែបញ្ចូលគ្នានូវឯកសារជាច្រើនដោយគ្មានការបង្ហាប់ (លំនាំដើម)zipfile.ZIP_DEFLATED
:ការបង្ហាប់ ZIP ធម្មតា (ត្រូវការម៉ូឌុល zlib)zipfile.ZIP_BZIP2
:ការបង្ហាប់ BZIP2 (ត្រូវការម៉ូឌុល bz2)zipfile.ZIP_LZMA
:ការបង្ហាប់ LZMA (ត្រូវការម៉ូឌុល lzma)
BZIP2 និង LZMA មានសមាមាត្របង្ហាប់ខ្ពស់ជាង (អាចត្រូវបានបង្ហាប់ទៅទំហំតូចជាង) ប៉ុន្តែពេលវេលាដែលត្រូវការសម្រាប់ការបង្ហាប់គឺយូរជាង។
នៅក្នុងវិធីសាស្ត្រ write() ឯកសារដែលមានឈ្មោះឯកសារអាគុយម៉ង់ទីមួយត្រូវបានសរសេរទៅឯកសារ ZIP ដែលមានឈ្មោះ arcname អាគុយម៉ង់ទីពីរ។ ប្រសិនបើ arcname ត្រូវបានលុបឈ្មោះឯកសារត្រូវបានប្រើដូច។ arcname ក៏អាចបញ្ជាក់រចនាសម្ព័ន្ធថតផងដែរ។
វត្ថុ ZipFile ចាំបាច់ត្រូវបិទដោយប្រើវិធីសាស្ត្រ close() ប៉ុន្តែប្រសិនបើអ្នកប្រើ with statement វានឹងបិទដោយស្វ័យប្រវត្តិ នៅពេលដែលប្លុកត្រូវបានបញ្ចប់។
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')
ដោយបញ្ជាក់អាគុយម៉ង់ compress_type នៃវិធីសាស្ត្រ write() វាក៏អាចជ្រើសរើសវិធីសាស្ត្របង្ហាប់សម្រាប់ឯកសារនីមួយៗផងដែរ។
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 ដែលមានស្រាប់ កំណត់អាគុយម៉ង់ដំបូងនៃអ្នកសាងសង់ទៅផ្លូវនៃឯកសារ zip ដែលមានស្រាប់ នៅពេលបង្កើតវត្ថុ ZipFile ។ ដូចគ្នានេះផងដែរកំណត់របៀបអាគុយម៉ង់ទីពីរដូចខាងក្រោម។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() ដើម្បីបង្កើតបញ្ជីឯកសារប៉ុន្តែវាកាន់តែងាយស្រួលប្រើ make_archive() នៅក្នុង shutil ម៉ូឌុល។
សូមមើលអត្ថបទខាងក្រោម។
- អត្ថបទដែលទាក់ទង:ការបង្ហាប់ថតឯកសារ (ថតឯកសារ) ទៅ zip ឬ tar នៅក្នុង Python
បានបង្ហាប់ទៅក្នុងឯកសារ ZIP ដែលមានពាក្យសម្ងាត់
ម៉ូឌុល zipfile មិនអនុញ្ញាតឱ្យអ្នកបង្កើត ZIP ដែលការពារដោយពាក្យសម្ងាត់ទេ។ ប្រសិនបើអ្នកចង់បង្ហាប់ឯកសារទៅក្នុងឯកសារ zip ដែលការពារដោយពាក្យសម្ងាត់ សូមប្រើបណ្ណាល័យភាគីទីបី pyminizip ។
ចំណាំថាការបង្រួម ZIP ដែលការពារដោយពាក្យសម្ងាត់អាចត្រូវបានធ្វើជាមួយម៉ូឌុល zipfile (សូមមើលខាងក្រោម)។
ពិនិត្យមើលមាតិកានៃឯកសារ ZIP ។
អ្នកអាចពិនិត្យមើលមាតិកានៃឯកសារ ZIP ដែលមានស្រាប់។
បង្កើតវត្ថុ ZipFile ដោយកំណត់ឯកសារអាគុយម៉ង់ដំបូងក្នុងអ្នកបង្កើតទៅផ្លូវនៃឯកសារ zip ដែលមានស្រាប់ និងរបៀបអាគុយម៉ង់ទីពីរទៅ ‘r’ ។ អាគុយម៉ង់របៀបអាចត្រូវបានលុបចោលចាប់តាំងពីលំនាំដើមគឺ ‘r’ ។
អ្នកអាចប្រើវិធីសាស្ត្រ namelist() នៃវត្ថុ ZipFile ដើម្បីទទួលបានបញ្ជីឯកសារដែលបានរក្សាទុក។
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 បង្កើតវត្ថុ ZipFile ជាមួយនឹងឯកសារអាគុយម៉ង់ទីមួយក្នុង constructor ជាផ្លូវទៅកាន់ឯកសារ ZIP ដែលមានស្រាប់ និងរបៀបអាគុយម៉ង់ទីពីរជា ‘r’ ដូចក្នុងឧទាហរណ៍ខាងលើ។ អាគុយម៉ង់របៀបអាចត្រូវបានលុបចោលព្រោះវាកំណត់លំនាំដើមទៅ ‘r’ ។
វិធីសាស្ត្រ Extractall() នៃវត្ថុ ZipFile ស្រង់ចេញ (មិនបង្ហាប់) មាតិកាទាំងមូលនៃឯកសារ ZIP ។ អាគុយម៉ង់ទីមួយ ផ្លូវ បញ្ជាក់ផ្លូវនៃថតដែលត្រូវស្រង់ចេញ។ ប្រសិនបើវាត្រូវបានលុបចោល ឯកសារនឹងត្រូវបានស្រង់ចេញទៅកាន់ថតបច្ចុប្បន្ន។
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extractall('data/temp/ext')
ឯកសារ ZIP ដែលមានពាក្យសម្ងាត់អាចត្រូវបានស្រង់ចេញដោយបញ្ជាក់ពាក្យសម្ងាត់ជាអាគុយម៉ង់ pwd នៃវិធីសាស្ត្រ extractall() ។
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() ក៏អនុញ្ញាតឱ្យអ្នកបញ្ជាក់ពាក្យសម្ងាត់ជា argument 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')