[Tutor] RE: how to zip data? (Branimir Petrovic)

Eri Mendz erimendz at gmail.com
Tue Nov 23 13:13:43 CET 2004


Hello list,

I'm trying to understanding this zip code. Can you kindly explain what's 
happening step by step? The try: finally clause is something new. And also 
what does the below code do? I see this always in the codes in this group. I 
seem not to encounter this (yet) in my tutorial reference. TIA

> if __name__=="__main__":

-- 
Regards,
erimendz
Gmail Google Mail


>> -----Original Message-----
>> From: Ramkumar Parimal Alagan [mailto:ramster6 at gmail.com]

[snip]
>> zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
>> 
>> if os.system(zip_command) == 0:
>>     print 'Successful backup to', target
>> else:
>>     print 'Backup FAILED'
>> 



> """No such a thing as "zip" command/utility on Windows, but using
> Python's standard library you could build your own.... 
> 
> Example below shows how to gz-ip a file (if you wonder why .gz and 
> not .zip: gzip library compresses as good and has no upper limit 
> on how large file it can process).
> 
> If below example looks too involving, you could purchase WinZip
> and get command line utility that will zip files for you via
> os.system call (but beware - WinZip can not zip/unzip files larger 
> than 4 GB)
> 
> Branimir 
> """
> 
> ######################################################################
> #   FileName    gzDemo.py
> ######################################################################
> 
> import exceptions, os, re, gzip
> 
> def gzipIt(filetogzip, gzippedname=None):
>     """Will GZIP file whose path is described by 'filetogzip' string.
> 
>     Parameters:
>         filetogzip, gzippedname - STRING
> 
>     By default (if 'gzippedname' not supplied):,
>         - will gunzip 'filetogzip' to same folder with the source file, 
>         - will add '.gz' suffix to file name
>         - will remove source file after successful gzipping.
> 
>     If 'gzippedname' is supplied, the source ('filetogzip') is not removed.
> 
>     Works like a charm although is 20% slower than GNU's gunzip utility.
>     """
> 
>     chunksize=1048576
>     removesource = False
> 
>     if not gzippedname: 
>         gzippedname = filetogzip + r'.gz'
>         removesource = True
> 
>     inputfile = file(filetogzip, r'rb', chunksize)
>     try:
>         chunkdata = inputfile.read(chunksize)
>         gzoutfile = gzip.open(gzippedname, mode='wb', compresslevel=5)
>         try:
>             while chunkdata:
>                 gzoutfile.write(chunkdata)
>                 chunkdata = inputfile.read(chunksize)
>         finally:
>             gzoutfile.close()
>     finally:
>         inputfile.close()
> 
>     if removesource: os.remove(filetogzip)
> 
> 
> def gunzipIt(filetogunzip, gunzippedname=None):
>     """Will GUNZIP file whose path is described by 'filetogzip' string.
> 
>     Parameters:
>         filetogunzip, gunzippedname - STRING
> 
>     By default (if 'gunzippedname' not supplied):,
>         - will gunzip 'filetogunzip' to same folder with the source file, 
>         - will strip '.gz' from file name suffix and 
>         - will remove source file after successful gunzipping.
> 
>     If 'gunzippedname' is supplied, the source ('filetogunzip') is not
> removed.
> 
>     Works like a charm although is 30% slower than GNU's gunzip utility.
>     """
> 
>     chunksize=8192
>     removesource = False
> 
>     if not gunzippedname:
>         # strip '.gz' off the end of gzippedname
>         gunzippedname = re.sub('(\.(g|G)(z|Z))', '', filetogunzip)
>         removesource = True
> 
>     fgunzip = gzip.open(filetogunzip, mode='rb')
>     try:
>         chunkdata = fgunzip.read(chunksize)
>         foutput = file(gunzippedname, r'wb', chunksize)
>         try:
>             while chunkdata:
>                 foutput.write(chunkdata)
>                 chunkdata = fgunzip.read(chunksize)
>         finally:
>             foutput.close()
>     finally:
>         fgunzip.close()
> 
>     if removesource: os.remove(filetogunzip)
> 
> 
> 
> 
> if __name__=="__main__":
> 
>     try:
>         # 1st run will "do-it:"
>         toZip = r'C:\_b\textStuff.txt'
>         gzipIt(toZip)
>     except exceptions.IOError:
>         # 2nd run will "un-do-it":
>         try:
>             toUnZip = r'C:\_b\textStuff.txt.gz'
>             gunzipIt(toUnZip)
>         except exceptions.IOError:
>              pass
> 
> 



More information about the Tutor mailing list