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