How to unzip a file with Python 2.4?

后端 未结 5 711
旧巷少年郎
旧巷少年郎 2020-12-08 09:42

I\'m having a hard time figuring out how to unzip a zip file with 2.4. extract() is not included in 2.4. I\'m restricted to using 2.4.4 on my server.

Ca

5条回答
  •  一生所求
    2020-12-08 10:22

    Not fully tested, but it should be okay:

    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
    

提交回复
热议问题