I have this simply python function that can extract a zip file (platform independent)
def unzip(source, target):
    with zipfile.ZipFile(source , "r") as z:
        z.extractall(target)
    print "Extracted : " + source +  " to: " + target
This runs fine with Python 2.7 but fails with Python 2.6:
AttributeError: ZipFile instance has no attribute '__exit__':
I found this suggestions that an upgrade is required 2.6 -> 2.7 https://bugs.launchpad.net/horizon/+bug/955994
But is it possible to port the above code to work with Python 2.6 and still keep it cross platform?
What about:
import contextlib
def unzip(source, target):
    with contextlib.closing(zipfile.ZipFile(source , "r")) as z:
        z.extractall(target)
    print "Extracted : " + source +  " to: " + target
contextlib.closing does exactly what the missing __exit__ method on the ZipFile would be supposed to do. Namely, call the close method
zipfile module Changed in python version 2.7.1:
I solved same problem by not using context manager "with" for python 2.6
 newzip = None
 try:
     newzip =  zipfile.ZipFile(_file + ".zip", "w", zipfile.ZIP_DEFLATED)
     newzip.write(_file)
 finally:
     newzip.close()
The with context manager protects against resource leaks, so in Python 2.6 I would at least still recommend a try/finally to close the resource.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With