zipfile ដើម្បីបង្ហាប់ និងពន្លាឯកសារ ZIP នៅក្នុង Python

អាជីវកម្ម

ម៉ូឌុល 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 ដែលមានពាក្យសម្ងាត់

ម៉ូឌុល 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')
Copied title and URL