Python စံပြစာကြည့်တိုက်၏ zipfile module ကို ZIP များထဲသို့ဖိုင်များချုံ့ရန်နှင့် ZIP ဖိုင်များကိုချုံ့ရန်အသုံးပြုနိုင်သည်။ ၎င်းကို စံပြစာကြည့်တိုက်တွင် ထည့်သွင်းထားသောကြောင့် ထပ်မံထည့်သွင်းရန်မလိုအပ်ပါ။
အောက်ပါအကြောင်းအရာများကို ရှင်းပြထားပါသည်။
- ဖိုင်များစွာကို ZIP ဖိုင်တစ်ခုအဖြစ် ချုံ့ပါ။
- ရှိပြီးသား ZIP ဖိုင်သို့ ဖိုင်အသစ်တစ်ခု ထည့်ပါ။
- လမ်းညွှန် (ဖိုင်တွဲ) ကို ZIP ဖိုင်တစ်ခုထဲသို့ ချုံ့ပါ။
- စကားဝှက်ဖြင့် ZIP ဖိုင်သို့ ချုံ့ထားသည်။
- ZIP ဖိုင်၏ အကြောင်းအရာများကို စစ်ဆေးပါ။
- ZIP ဖိုင်၏ အကြောင်းအရာ တစ်ခုလုံးကို ဖြည်(ထုပ်)ပါ။
- ZIP ဖိုင်၏ အကြောင်းအရာများကို ရွေးပြီး ထုတ်ယူပါ။
- ဖိုင်များစွာကို ZIP ဖိုင်တစ်ခုအဖြစ် ချုံ့ပါ။
- ရှိပြီးသား ZIP ဖိုင်သို့ ဖိုင်အသစ်တစ်ခု ထည့်ပါ။
- လမ်းညွှန် (ဖိုင်တွဲ) ကို ZIP ဖိုင်တစ်ခုထဲသို့ ချုံ့ပါ။
- စကားဝှက်ဖြင့် ZIP ဖိုင်သို့ ချုံ့ထားသည်။
- ZIP ဖိုင်၏ အကြောင်းအရာများကို စစ်ဆေးပါ။
- ZIP ဖိုင်၏ အကြောင်းအရာ တစ်ခုလုံးကို ဖြည်(ထုပ်)ပါ။
- ZIP ဖိုင်၏ အကြောင်းအရာများကို ရွေးပြီး ထုတ်ယူပါ။
ဖိုင်များစွာကို ZIP ဖိုင်တစ်ခုအဖြစ် ချုံ့ပါ။
ZipFile အရာဝတ္ထုတစ်ခုဖန်တီးပြီး သင်ချုံ့လိုသောဖိုင်များကို ထည့်ရန် write() နည်းလမ်းကို အသုံးပြုပါ။
ZIP ဖိုင်အသစ်တစ်ခုဖန်တီးရန်၊ ZipFile အရာဝတ္ထုတည်ဆောက်သူ၏ ပထမအငြင်းအခုံအဖြစ် ဖန်တီးရမည့် ZIP ဖိုင်၏လမ်းကြောင်းကို သတ်မှတ်ပေးပြီး ဒုတိယအငြင်းအခုံမှာ အောက်ပါအတိုင်းဖြစ်သည်။w'
ထို့အပြင်၊ compression method ကို တတိယအငြင်းအခုံအဖြစ် သတ်မှတ်နိုင်သည်။
zipfile.ZIP_STORED
:ချုံ့ခြင်းမရှိဘဲ ဖိုင်များစွာကို ပေါင်းစပ်လိုက်ရုံ (မူလ)zipfile.ZIP_DEFLATED
:ပုံမှန် ZIP ချုံ့မှု (zlib မော်ဂျူး လိုအပ်သည်)zipfile.ZIP_BZIP2
:BZIP2 ချုံ့မှု (bz2 မော်ဂျူး လိုအပ်သည်)zipfile.ZIP_LZMA
:LZMA ချုံ့ခြင်း (lzma module လိုအပ်သည်)
BZIP2 နှင့် LZMA သည် ပိုမိုမြင့်မားသော compression ratio ရှိသည် (သေးငယ်သောအရွယ်အစားသို့ချုံ့နိုင်သည်)၊ သို့သော် compression အတွက်လိုအပ်သောအချိန်သည်ပိုရှည်သည်။
write() method တွင်၊ ပထမအငြင်းပွားမှု ဖိုင်အမည်ပါသည့် ဖိုင်ကို ဒုတိယအငြင်းအခုံ arcname ဖြင့် ZIP ဖိုင်တစ်ခုသို့ ရေးသားထားသည်။ arcname ကို ချန်လှပ်ထားလျှင် ဖိုင်အမည်ကို ယခင်အတိုင်း အသုံးပြုပါသည်။ arcname သည် directory တည်ဆောက်ပုံကို သတ်မှတ်နိုင်သည်။
ZipFile အရာဝတ္တုအား close() နည်းလမ်းဖြင့် ပိတ်ရန် လိုအပ်သည်၊ သို့သော် အကယ်၍ သင်သည် with statement ကိုအသုံးပြုပါက block ပြီးသောအခါ အလိုအလျောက် ပိတ်သွားမည်ဖြစ်ပါသည်။
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() method ၏ compress_type argument ကို သတ်မှတ်ခြင်းဖြင့်၊ ဖိုင်တစ်ခုစီအတွက် compression method ကို ရွေးရန်လည်း ဖြစ်နိုင်သည်။
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 အရာဝတ္ထုကို ဖန်တီးသောအခါတွင် တည်ဆောက်သူ၏ ပထမဆုံး အကြောင်းပြချက်ကို ဇစ်ဖိုင်၏လမ်းကြောင်းသို့ သတ်မှတ်ပါ။ ထို့အပြင်၊ ဒုတိယအငြင်းပွားမှုမုဒ်ကို အောက်ပါအတိုင်း သတ်မှတ်ပါ။a'
ပြီးရင် အပေါ်က ဥပမာမှာ အတိုင်း write() method ကိုသုံးပြီး ဖိုင်ကိုထည့်လိုက်ရုံပါပဲ။
with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
existing_zip.write('data/temp/test4.txt', arcname='test4.txt')
လမ်းညွှန် (ဖိုင်တွဲ) ကို ZIP ဖိုင်တစ်ခုထဲသို့ ချုံ့ပါ။
အကယ်၍ သင်သည် directory (folder) တစ်ခုလုံးကို ZIP ဖိုင်တစ်ခုထဲသို့ ချုံ့လိုပါက၊ ဖိုင်များစာရင်းပြုလုပ်ရန် os.scandir() သို့မဟုတ် os.listdir() ကိုသုံးနိုင်သော်လည်း shutil တွင် make_archive() ကိုအသုံးပြုရန်ပိုမိုလွယ်ကူပါသည်။ မော်ဂျူး
အောက်ပါဆောင်းပါးကိုကြည့်ပါ။
- ဆက်စပ်ဆောင်းပါးများ-Python တွင် ဇစ် သို့မဟုတ် tar သို့ လမ်းညွှန် (ဖိုင်တွဲ) ကို ချုံ့နေသည်။
စကားဝှက်ဖြင့် ZIP ဖိုင်သို့ ချုံ့ထားသည်။
zipfile module သည် သင့်အား စကားဝှက်ဖြင့် ကာကွယ်ထားသော ZIP များကို ဖန်တီးခွင့်မပြုပါ။ ဖိုင်တစ်ခုကို စကားဝှက်ဖြင့် ကာကွယ်ထားသော ဇစ်ဖိုင်တစ်ခုသို့ ချုံ့လိုပါက၊ ပြင်ပအဖွဲ့အစည်း စာကြည့်တိုက် pyminizip ကို အသုံးပြုပါ။
စကားဝှက်ဖြင့်ကာကွယ်ထားသော 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 ဖိုင်သို့ လမ်းကြောင်းအဖြစ် တည်ဆောက်သူရှိ ပထမအငြင်းပွားမှုဖိုင်နှင့်အတူ ZipFile အရာဝတ္ထုတစ်ခုကို ဖန်တီးပါ။ ၎င်းသည် ‘r’ ဟု ပုံသေသတ်မှတ်ထားသောကြောင့် မုဒ်အငြင်းအခုံကို ချန်လှပ်ထားနိုင်သည်။
ZipFile အရာဝတ္တု၏ extractall() နည်းလမ်းသည် ZIP ဖိုင်၏ အကြောင်းအရာတစ်ခုလုံးကို ဖြည်ထုတ်သည် (ချုံ့ထားသည်)။ ပထမအငြင်းအခုံ၊ လမ်းကြောင်းသည် ထုတ်ယူရန် လမ်းညွှန်၏လမ်းကြောင်းကို သတ်မှတ်သည်။ ချန်လှပ်ထားလျှင် ဖိုင်များကို လက်ရှိလမ်းညွှန်သို့ ထုတ်ယူသွားပါမည်။
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extractall('data/temp/ext')
စကားဝှက်ပါရှိသော ZIP ဖိုင်ကို extractall() နည်းလမ်း၏ argument 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() method ၏ ပထမ argument သည် ထုတ်ယူရမည့် ဖိုင်၏ အမည်ဖြစ်ပြီး ဒုတိယ argument လမ်းကြောင်းသည် ထုတ်ယူရန် directory ၏ လမ်းကြောင်းဖြစ်သည်။ path argument ကို ချန်လှပ်ထားလျှင် ဖိုင်ကို လက်ရှိ directory သို့ ထုတ်ယူသွားပါမည်။ ထုတ်ယူမည့်ဖိုင်၏အမည်တွင် ၎င်းကိုထိုနေရာတွင်သိမ်းဆည်းထားပါက ZIP ဖိုင်ရှိလမ်းညွှန်သို့ လမ်းကြောင်းပါဝင်သင့်သည်။
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extract('test1.txt', 'data/temp/ext2')
extractall() method ကဲ့သို့ပင်၊ extract() method သည် 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')