Unzipping directory structure with python

后端 未结 9 1565
闹比i
闹比i 2020-12-13 00:56

I have a zip file which contains the following directory structure:

dir1\\dir2\\dir3a
dir1\\dir2\\dir3b

I\'m trying to unzip it and maintai

相关标签:
9条回答
  • 2020-12-13 01:24

    If like me, you have to extract a complete zip archive with an older Python release (in my case, 2.4) here's what I came up with (based on Jeff's answer):

    import zipfile
    import os
    
    def unzip(source_file_path, destination_dir):
        destination_dir += '/'
        z = zipfile.ZipFile(source_file_path, 'r')
        for file in z.namelist():
            outfile_path = destination_dir + file
            if file.endswith('/'):
                os.makedirs(outfile_path)
            else:
                outfile = open(outfile_path, 'wb')
                outfile.write(z.read(file))
                outfile.close()
        z.close()
    
    0 讨论(0)
  • 2020-12-13 01:26

    I know it may be a little late to say this but Jeff is right. It's as simple as:

    import os
    from zipfile import ZipFile as zip
    
    def extractAll(zipName):
        z = zip(zipName)
        for f in z.namelist():
            if f.endswith('/'):
                os.makedirs(f)
            else:
                z.extract(f)
    
    if __name__ == '__main__':
        zipList = ['one.zip', 'two.zip', 'three.zip']
        for zip in zipList:
            extractAll(zipName)
    
    0 讨论(0)
  • 2020-12-13 01:30

    The extract and extractall methods are great if you're on Python 2.6. I have to use Python 2.5 for now, so I just need to create the directories if they don't exist. You can get a listing of directories with the namelist() method. The directories will always end with a forward slash (even on Windows) e.g.,

    import os, zipfile
    
    z = zipfile.ZipFile('myfile.zip')
    for f in z.namelist():
        if f.endswith('/'):
            os.makedirs(f)
    

    You probably don't want to do it exactly like that (i.e., you'd probably want to extract the contents of the zip file as you iterate over the namelist), but you get the idea.

    0 讨论(0)
提交回复
热议问题