복붙노트

[PYTHON] Python 2.4로 파일의 압축을 해제하는 방법은 무엇입니까?

PYTHON

Python 2.4로 파일의 압축을 해제하는 방법은 무엇입니까?

2.4로 zip 파일을 압축 해제하는 방법을 알아내는 데 어려움을 겪고 있습니다. extract ()는 2.4에 포함되어 있지 않습니다. 내 서버에서 2.4.4를 사용하는 것으로 제한됩니다.

누군가 간단한 코드 예제를 제공해 줄 수 있습니까?

해결법

  1. ==============================

    1.namelist () 및 extract ()를 사용해야합니다. 디렉토리를 고려한 샘플

    namelist () 및 extract ()를 사용해야합니다. 디렉토리를 고려한 샘플

    import zipfile
    import os.path
    import os
    zfile = zipfile.ZipFile("test.zip")
    for name in zfile.namelist():
      (dirname, filename) = os.path.split(name)
      print "Decompressing " + filename + " on " + dirname
      if not os.path.exists(dirname):
        os.makedirs(dirname)
      zfile.extract(name, dirname)
    
  2. ==============================

    2.Vinko의 답변에 문제가 있습니다 (적어도 실행했을 때). 나는 :

    Vinko의 답변에 문제가 있습니다 (적어도 실행했을 때). 나는 :

    IOError: [Errno 13] Permission denied: '01org-webapps-countingbeads-422c4e1/'
    

    해결 방법은 다음과 같습니다.

    # unzip a file
    def unzip(path):
        zfile = zipfile.ZipFile(path)
        for name in zfile.namelist():
            (dirname, filename) = os.path.split(name)
            if filename == '':
                # directory
                if not os.path.exists(dirname):
                    os.mkdir(dirname)
            else:
                # file
                fd = open(name, 'w')
                fd.write(zfile.read(name))
                fd.close()
        zfile.close()
    
  3. ==============================

    3.목적지 디렉토리를 지정할 수 있도록 Ovilia의 대답 수정하기 :

    목적지 디렉토리를 지정할 수 있도록 Ovilia의 대답 수정하기 :

    def unzip(zipFilePath, destDir):
        zfile = zipfile.ZipFile(zipFilePath)
        for name in zfile.namelist():
            (dirName, fileName) = os.path.split(name)
            if fileName == '':
                # directory
                newDir = destDir + '/' + dirName
                if not os.path.exists(newDir):
                    os.mkdir(newDir)
            else:
                # file
                fd = open(destDir + '/' + name, 'wb')
                fd.write(zfile.read(name))
                fd.close()
        zfile.close()
    
  4. ==============================

    4.완전히 테스트되지는 않았지만 괜찮을 것입니다.

    완전히 테스트되지는 않았지만 괜찮을 것입니다.

    import os
    from zipfile import ZipFile, ZipInfo
    
    class ZipCompat(ZipFile):
        def __init__(self, *args, **kwargs):
            ZipFile.__init__(self, *args, **kwargs)
    
        def extract(self, member, path=None, pwd=None):
            if not isinstance(member, ZipInfo):
                member = self.getinfo(member)
            if path is None:
                path = os.getcwd()
            return self._extract_member(member, path)
    
        def extractall(self, path=None, members=None, pwd=None):
            if members is None:
                members = self.namelist()
            for zipinfo in members:
                self.extract(zipinfo, path)
    
        def _extract_member(self, member, targetpath):
            if (targetpath[-1:] in (os.path.sep, os.path.altsep)
                and len(os.path.splitdrive(targetpath)[1]) > 1):
                targetpath = targetpath[:-1]
            if member.filename[0] == '/':
                targetpath = os.path.join(targetpath, member.filename[1:])
            else:
                targetpath = os.path.join(targetpath, member.filename)
            targetpath = os.path.normpath(targetpath)
            upperdirs = os.path.dirname(targetpath)
            if upperdirs and not os.path.exists(upperdirs):
                os.makedirs(upperdirs)
            if member.filename[-1] == '/':
                if not os.path.isdir(targetpath):
                    os.mkdir(targetpath)
                return targetpath
            target = file(targetpath, "wb")
            try:
                target.write(self.read(member.filename))
            finally:
                target.close()
            return targetpath
    
  5. ==============================

    5.Python 2.7.3rc2에서 테스트 중이며 ZipFile.namelist ()는 하위 디렉토리를 만들기위한 하위 디렉토리 이름이있는 항목을 반환하지 않지만 다음과 같이 하위 디렉토리가있는 파일 이름 목록 만 반환합니다.

    Python 2.7.3rc2에서 테스트 중이며 ZipFile.namelist ()는 하위 디렉토리를 만들기위한 하위 디렉토리 이름이있는 항목을 반환하지 않지만 다음과 같이 하위 디렉토리가있는 파일 이름 목록 만 반환합니다.

    따라서 수표

    True로 평가되지 않습니다.

    그래서 dirName이 destDir 안에 있는지 확인하고 존재하지 않으면 dirName을 생성하도록 코드를 수정했습니다. 파일은 fileName 부분이 비어 있지 않은 경우에만 추출됩니다. 따라서 이것은 디렉토리 이름이 ZipFile.namelist ()에 나타날 수있는 조건을 처리해야합니다.

    def unzip(zipFilePath, destDir):
        zfile = zipfile.ZipFile(zipFilePath)
        for name in zfile.namelist():
            (dirName, fileName) = os.path.split(name)
            # Check if the directory exisits
            newDir = destDir + '/' + dirName
            if not os.path.exists(newDir):
                os.mkdir(newDir)
            if not fileName == '':
                # file
                fd = open(destDir + '/' + name, 'wb')
                fd.write(zfile.read(name))
                fd.close()
        zfile.close()
    
  6. from https://stackoverflow.com/questions/7806563/how-to-unzip-a-file-with-python-2-4 by cc-by-sa and MIT license