પાયથોનમાં ઝીપ ફાઇલોને સંકુચિત અને અનકોમ્પ્રેસ કરવા માટે zipfile

બિઝનેસ

પાયથોન સ્ટાન્ડર્ડ લાઇબ્રેરીના ઝિપફાઇલ મોડ્યુલનો ઉપયોગ ફાઇલોને ઝીપમાં સંકુચિત કરવા અને ઝીપ ફાઇલોને અનકોમ્પ્રેસ કરવા માટે કરી શકાય છે. તે પ્રમાણભૂત પુસ્તકાલયમાં શામેલ છે, તેથી કોઈ વધારાના ઇન્સ્ટોલેશનની જરૂર નથી.

નીચેની સામગ્રીઓ સમજાવવામાં આવી છે.

  • ઘણી ફાઇલોને ઝીપ ફાઇલમાં સંકુચિત કરો
  • હાલની ZIP ફાઇલમાં નવી ફાઇલ ઉમેરો
  • ડિરેક્ટરી (ફોલ્ડર) ને ઝીપ ફાઇલમાં સંકુચિત કરો
  • પાસવર્ડ સાથે ઝીપ ફાઇલમાં સંકુચિત
  • ઝીપ ફાઇલની સામગ્રી તપાસો.
  • ZIP ફાઇલની સંપૂર્ણ સામગ્રીને બહાર કાઢો (અનપૅક કરો).
  • ZIP ફાઇલની સામગ્રી પસંદ કરો અને તેને બહાર કાઢો.

ઘણી ફાઇલોને ઝીપ ફાઇલમાં સંકુચિત કરો

એક ZipFile ઑબ્જેક્ટ બનાવો અને તમે જે ફાઇલોને કોમ્પ્રેસ કરવા માંગો છો તેને ઉમેરવા માટે write() પદ્ધતિનો ઉપયોગ કરો.

નવી ZIP ફાઇલ બનાવવા માટે, ZipFile ઑબ્જેક્ટના કન્સ્ટ્રક્ટરની પ્રથમ દલીલ તરીકે બનાવવાની ZIP ફાઇલનો પાથ અને નીચે પ્રમાણે બીજી દલીલનો ઉલ્લેખ કરો.w'

વધુમાં, કમ્પ્રેશન પદ્ધતિને ત્રીજી દલીલ તરીકે સ્પષ્ટ કરી શકાય છે.

  • zipfile.ZIP_STORED:ફક્ત કમ્પ્રેશન વિના બહુવિધ ફાઇલોને જોડો (ડિફૉલ્ટ)
  • zipfile.ZIP_DEFLATED:સામાન્ય ઝીપ કમ્પ્રેશન (zlib મોડ્યુલ જરૂરી)
  • zipfile.ZIP_BZIP2:BZIP2 કમ્પ્રેશન (bz2 મોડ્યુલ જરૂરી)
  • zipfile.ZIP_LZMA:LZMA કમ્પ્રેશન (lzma મોડ્યુલ જરૂરી)

BZIP2 અને LZMA નો કમ્પ્રેશન રેશિયો વધારે છે (નાના કદમાં સંકુચિત કરી શકાય છે), પરંતુ કમ્પ્રેશન માટે જરૂરી સમય લાંબો છે.

રાઇટ() પદ્ધતિમાં, પ્રથમ દલીલ ફાઇલનામવાળી ફાઇલને બીજી દલીલ આર્કનામ સાથે ઝીપ ફાઇલમાં લખવામાં આવે છે. જો આર્કનામ અવગણવામાં આવે છે, તો ફાઇલનામ જેમ છે તેમ વપરાય છે. 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')

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 ફાઇલમાં નવી ફાઇલ ઉમેરો

હાલની ઝિપ ફાઇલમાં નવી ફાઇલ ઉમેરવા માટે, ઝિપફાઇલ ઑબ્જેક્ટ બનાવતી વખતે કન્સ્ટ્રક્ટરની પ્રથમ દલીલને હાલની ઝિપ ફાઇલના પાથ પર સેટ કરો. ઉપરાંત, નીચે પ્રમાણે બીજો દલીલ મોડ સેટ કરો.a'

પછી, ઉપરના ઉદાહરણની જેમ, ફક્ત write() પદ્ધતિનો ઉપયોગ કરીને ફાઇલ ઉમેરો.

with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
    existing_zip.write('data/temp/test4.txt', arcname='test4.txt')

ડિરેક્ટરી (ફોલ્ડર) ને ઝીપ ફાઇલમાં સંકુચિત કરો

જો તમે આખી ડિરેક્ટરી (ફોલ્ડર)ને એક જ ઝીપ ફાઇલમાં સંકુચિત કરવા માંગો છો, તો તમે ફાઇલોની સૂચિ બનાવવા માટે os.scandir() અથવા os.listdir() નો ઉપયોગ કરી શકો છો, પરંતુ shutil માં make_archive() નો ઉપયોગ કરવો વધુ સરળ છે. મોડ્યુલ

નીચેનો લેખ જુઓ.

પાસવર્ડ સાથે ઝીપ ફાઇલમાં સંકુચિત

zipfile મોડ્યુલ તમને પાસવર્ડ-સંરક્ષિત ઝીપ બનાવવાની મંજૂરી આપતું નથી. જો તમે કોઈ ફાઇલને પાસવર્ડથી સુરક્ષિત ઝિપ ફાઇલમાં સંકુચિત કરવા માંગો છો, તો થર્ડ પાર્ટી લાઇબ્રેરી pyminizip નો ઉપયોગ કરો.

નોંધ કરો કે પાસવર્ડ-સંરક્ષિત ઝીપનું ડિકમ્પ્રેશન ઝિપફાઈલ મોડ્યુલ (નીચે જુઓ) વડે કરી શકાય છે.

ઝીપ ફાઇલની સામગ્રી તપાસો.

તમે હાલની ઝીપ ફાઇલની સામગ્રીઓ ચકાસી શકો છો.

કન્સ્ટ્રક્ટરમાં પ્રથમ દલીલ ફાઇલને હાલની ઝિપ ફાઇલના પાથ પર અને બીજી દલીલ મોડને ‘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 ફાઇલની સંપૂર્ણ સામગ્રીને બહાર કાઢો (અનપૅક કરો).

ઝીપ ફાઇલના સમાવિષ્ટોને અનપૅક કરવા માટે, ઉપરના ઉદાહરણની જેમ કન્સ્ટ્રક્ટરમાં પ્રથમ દલીલ ફાઇલ સાથે હાલની ઝીપ ફાઇલના પાથ તરીકે અને બીજી દલીલ મોડ ‘r’ તરીકે ZipFile ઑબ્જેક્ટ બનાવો. મોડ દલીલને બાદ કરી શકાય છે કારણ કે તે ડિફોલ્ટ ‘r’ છે.

ZipFile ઑબ્જેક્ટની extractall() પદ્ધતિ ZIP ફાઇલની સંપૂર્ણ સામગ્રીને બહાર કાઢે છે (અસંકોચિત કરે છે). પ્રથમ દલીલ, પાથ, નિર્દેશિકાના પાથને નિર્દિષ્ટ કરે છે કે જેના પર બહાર કાઢવાનું છે. જો તે અવગણવામાં આવે છે, તો ફાઇલોને વર્તમાન ડિરેક્ટરીમાં કાઢવામાં આવશે.

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extractall('data/temp/ext')

Extractall() મેથડના આર્ગ્યુમેન્ટ pwd તરીકે પાસવર્ડનો ઉલ્લેખ કરીને પાસવર્ડ સાથેની ZIP ફાઇલ એક્સટ્રેક્ટ કરી શકાય છે.

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() પદ્ધતિની પ્રથમ દલીલ એ એક્સટ્રેક્ટ કરવા માટેની ફાઇલનું નામ છે, અને બીજી દલીલ પાથ એ એક્સટ્રેક્ટ કરવા માટેની ડિરેક્ટરીનો પાથ છે. જો પાથ દલીલ અવગણવામાં આવે છે, તો ફાઇલ વર્તમાન ડિરેક્ટરીમાં કાઢવામાં આવશે. એક્સટ્રેક્ટ કરવાની ફાઇલના નામમાં ઝીપ ફાઇલમાં ડિરેક્ટરીનો પાથ શામેલ હોવો જોઈએ જો તે ત્યાં સંગ્રહિત હોય.

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')