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