Python සම්මත පුස්තකාලයේ zipfile මොඩියුලය ගොනු ZIP වලට සම්පීඩනය කිරීමට සහ ZIP ගොනු සම්පීඩනය කිරීමට භාවිතා කළ හැක. එය සම්මත පුස්තකාලයට ඇතුළත් කර ඇත, එබැවින් අමතර ස්ථාපනයක් අවශ්ය නොවේ.
පහත අන්තර්ගතය පැහැදිලි කර ඇත.
- ZIP ගොනුවකට ගොනු කිහිපයක් සම්පීඩනය කරන්න
- පවතින ZIP ගොනුවකට නව ගොනුවක් එක් කරන්න
- බහලුම (ෆෝල්ඩරය) ZIP ගොනුවකට සම්පීඩනය කරන්න
- මුරපදයක් සහිත ZIP ගොනුවකට සම්පීඩිත කර ඇත
- ZIP ගොනුවේ අන්තර්ගතය පරීක්ෂා කරන්න.
- ZIP ගොනුවේ සම්පූර්ණ අන්තර්ගතය උපුටා ගන්න (අසුරන්න).
- ZIP ගොනුවේ අන්තර්ගතය තෝරන්න සහ එය උපුටා ගන්න.
ZIP ගොනුවකට ගොනු කිහිපයක් සම්පීඩනය කරන්න
ZipFile වස්තුවක් සාදා ඔබට සම්පීඩනය කිරීමට අවශ්ය ගොනු එකතු කිරීමට ලිවීම () ක්රමය භාවිතා කරන්න.
නව ZIP ගොනුවක් සෑදීමට, ZipFile වස්තුවේ කන්ස්ට්රක්ටරයේ පළමු තර්කය ලෙස නිර්මාණය කළ යුතු ZIP ගොනුවේ මාර්ගය සහ පහත දැක්වෙන පරිදි දෙවන තර්කය සඳහන් කරන්න.w'
මීට අමතරව, සම්පීඩන ක්රමය තුන්වන තර්කය ලෙස දැක්විය හැක.
zipfile.ZIP_STORED
:සම්පීඩනයකින් තොරව ගොනු කිහිපයක් ඒකාබද්ධ කරන්න (පෙරනිමිය)zipfile.ZIP_DEFLATED
:සාමාන්ය ZIP සම්පීඩනය (zlib මොඩියුලය අවශ්යයි)zipfile.ZIP_BZIP2
:BZIP2 සම්පීඩනය (bz2 මොඩියුලය අවශ්යයි)zipfile.ZIP_LZMA
:LZMA සම්පීඩනය (lzma මොඩියුලය අවශ්යයි)
BZIP2 සහ LZMA වැඩි සම්පීඩන අනුපාතයක් ඇත (කුඩා ප්රමාණයකට සම්පීඩනය කළ හැක), නමුත් සම්පීඩනය සඳහා ගතවන කාලය වැඩි වේ.
ලියන() ක්රමයේදී, පළමු තර්ක ගොනු නාමය සහිත ගොනුව දෙවන තර්ක නාමය සහිත ZIP ගොනුවකට ලියා ඇත. arcname ඉවත් කර ඇත්නම්, ගොනු නාමය එලෙසම භාවිතා වේ. arcname මඟින් නාමාවලි ව්යුහයක් ද නියම කළ හැක.
ZipFile වස්තුව close() ක්රමය සමඟ වසා දැමිය යුතුය, නමුත් ඔබ ප්රකාශය සමඟ භාවිතා කරන්නේ නම්, අවහිර කිරීම අවසන් වූ විට එය ස්වයංක්රීයව වසා දමනු ඇත.
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 තර්කය සඳහන් කිරීමෙන්, එක් එක් ගොනුව සඳහා සම්පීඩන ක්රමය තෝරා ගැනීමටද හැකිය.
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'
පසුව, ඉහත උදාහරණයේ මෙන්, ලියන්න() ක්රමය භාවිතා කර ගොනුව එක් කරන්න.
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() භාවිතා කිරීම පහසුය. මොඩියුලය.
පහත ලිපිය බලන්න.
මුරපදයක් සහිත ZIP ගොනුවකට සම්පීඩිත කර ඇත
zipfile මොඩියුලය ඔබට මුරපද ආරක්ෂිත ZIP නිර්මාණය කිරීමට ඉඩ නොදේ. ඔබට ගොනුවක් මුරපද ආරක්ෂිත zip ගොනුවකට සම්පීඩනය කිරීමට අවශ්ය නම්, තෙවන පාර්ශවීය පුස්තකාලය pyminizip භාවිතා කරන්න.
මුරපදය-ආරක්ෂිත ZIP වල විසංයෝජනය zipfile මොඩියුලය සමඟ සිදු කළ හැකි බව සලකන්න (පහත බලන්න).
ZIP ගොනුවේ අන්තර්ගතය පරීක්ෂා කරන්න.
ඔබට පවතින ZIP ගොනුවක අන්තර්ගතය පරීක්ෂා කළ හැක.
කන්ස්ට්රක්ටරයේ පළමු තර්ක ගොනුව පවතින zip ගොනුවේ මාර්ගයට සහ දෙවන තර්ක මාදිලිය ‘r’ ලෙස සැකසීමෙන් ZipFile වස්තුවක් සාදන්න. පෙරනිමිය ‘r’ බැවින් මාදිලියේ තර්කය මඟ හැරිය හැක.
සංරක්ෂිත ගොනු ලැයිස්තුවක් ලබා ගැනීමට ඔබට 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 ගොනුවක අන්තර්ගතය ඉවත් කිරීම සඳහා, ඉහත උදාහරණයේ මෙන්, දැනට පවතින ZIP ගොනුවට මාර්ගය ලෙසත්, දෙවන තර්ක මාදිලිය ‘r’ ලෙසත්, Constructor හි පළමු තර්ක ගොනුව සමඟ 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 ගොනුවේ අන්තර්ගතය තෝරන්න සහ එය උපුටා ගන්න.
ඔබට යම් යම් ගොනු පමණක් Unpack කර Extract කිරීමට අවශ්ය නම්, extract() ක්රමය භාවිතා කරන්න.
Extract() ක්රමයේ පළමු තර්කය වන්නේ උපුටා ගැනීම සඳහා ගොනුවේ නම වන අතර, දෙවන තර්ක මාර්ගය වන්නේ extract කිරීමට ඇති බහලුමේ මාර්ගයයි. මාර්ග තර්කය මග හරිනු ලැබුවහොත්, ගොනුව වත්මන් නාමාවලියට උකහා ගනු ලැබේ. උපුටා ගත යුතු ගොනුවේ නම එහි ගබඩා කර ඇත්නම් ZIP ගොනුවේ නාමාවලියට යන මාර්ගය ඇතුළත් විය යුතුය.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extract('test1.txt', 'data/temp/ext2')
Extractall() ක්රමය මෙන්, extract() ක්රමයද ඔබට password එකක් 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')