2014-01-21 3 views
8

파이썬 2.7 코드는 내가 (독립 플랫폼) zip 파일을 추출 할 수 있습니다이 단순히 파이썬 기능이 2.6

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

이 파이썬 2.7와 잘 실행 파이썬으로 실행하지만, 파이썬 2.6 실패 제작 :

AttributeError: ZipFile instance has no attribute '__exit__': 

나는 업그레이드가 2.6 필요하다고이 제안을 발견 -> 2.7 https://bugs.launchpad.net/horizon/+bug/955994

을하지만 포트 수에 법과에 위의 코드입니다 k를 파이썬 2.6과 함께 사용하고 아직도 크로스 플랫폼을 유지하고 있습니까?

답변

15

무엇에 대해 :

import contextlib 

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

contextlib.closingZipFile에 누락 된 __exit__ 방법은 어떻게해야 될 정확히 않습니다. 즉, close 메소드를 호출

+0

zipfile 모듈 컨텍스트 관리자의 경우 "with"는 Python 버전 2.7.1에서 지원됩니다. https://docs.python.org/2/library/zipfile.html 이전 버전의 경우 "with"없이 시도하십시오. –

1
파이썬 버전 2.7.1 변경

ZipFile를 모듈 : 파일 모드로 생성되는 경우

  • 'A'또는 'w'다음 가 어떤 파일을 추가하지 않고 종료 아카이브의 경우, 에 대한 적절한 ZIP 구조가 비어있는 아카이브가 파일에 기록됩니다.
  • ZipFile도 컨텍스트 관리자이므로 문을 지원합니다. 파이썬 2.6에서 나는 적어도 아직 시도를 추천 할 것입니다 수 있도록

나는/컨텍스트 매니저 2.6

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

(가) 자원 누출을 방지 파이썬은 "과"컨텍스트 관리자를 사용하지 않음으로써 같은 문제를 해결 마침내 자원을 닫습니다.

+0

컨텍스트 관리자를 사용하면 리소스 누출을 방지 할 수 있으므로 Python 2.6에서는 리소스를 닫으려고 try/finally를 사용하는 것이 좋습니다. – Adam