繁体   English   中英

使用Python 2.6运行Python 2.7代码

[英]Making Python 2.7 code run with Python 2.6

我有这个简单的python函数,可以提取zip文件(独立于平台)

def unzip(source, target):
    with zipfile.ZipFile(source , "r") as z:
        z.extractall(target)
    print "Extracted : " + source +  " to: " + target

这在Python 2.7中运行良好,但在Python 2.6中失败:

AttributeError: ZipFile instance has no attribute '__exit__':

我发现这个建议需要升级2.6 - > 2.7 https://bugs.launchpad.net/horizo​​n/+bug/955994

但是可以将上面的代码移植到Python 2.6并仍然保持跨平台吗?

关于什么:

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确实完成了ZipFile上缺少的__exit__方法应该做的事情。 即,调用close方法

zipfile模块在python版本2.7.1中更改:

  • 如果使用模式“a”或“w”创建文件,然后在不向归档添加任何文件的情况下关闭该文件,则会将空归档的相应ZIP结构写入该文件。
  • ZipFile也是一个上下文管理器,因此支持with语句。

我没有使用python 2.6的上下文管理器“with”解决了同样的问题

 newzip = None
 try:
     newzip =  zipfile.ZipFile(_file + ".zip", "w", zipfile.ZIP_DEFLATED)
     newzip.write(_file)
 finally:
     newzip.close()

with context manager防止资源泄漏,因此在Python 2.6中我至少仍然建议尝试/最终关闭资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM