Unzip zip files in folders and subfolders with python

后端 未结 3 622
一生所求
一生所求 2020-12-09 23:21

I try to unzip 150 zip files. All the zip files as different names, and they all spread in one big folder that divided to a lot of sub folders and sub sub folders.i want to

相关标签:
3条回答
  • 2020-12-09 23:25

    UPDATE:

    Finally, this code worked for me:

    import zipfile,fnmatch,os
    
    rootPath = r"C:\Project"
    pattern = '*.zip'
    for root, dirs, files in os.walk(rootPath):
        for filename in fnmatch.filter(files, pattern):
            print(os.path.join(root, filename))
            zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0]))
    
    0 讨论(0)
  • 2020-12-09 23:25

    You could use Path.rglob() to enumerate zip-files recursively and shutil.unpack_archive() to unpack zip files:

    #!/usr/bin/env python3
    import logging
    from pathlib import Path
    from shutil import unpack_archive
    
    zip_files = Path(r"C:\Project\layers").rglob("*.zip")
    while True:
        try:
            path = next(zip_files)
        except StopIteration:
            break # no more files
        except PermissionError:
            logging.exception("permission error")
        else:
             extract_dir = path.with_name(path.stem)
             unpack_archive(str(path), str(extract_dir), 'zip')
    

    It "extract[s] each archive to separate folder with the same name as the original zip file name and also in the same place as the original zip file" e.g., it extracts 'layers/dir/file.zip' archive into 'layers/dir/file' directory.

    0 讨论(0)
  • 2020-12-09 23:32

    To unzip all the files into a temporary folder (Ubuntu)

    import tempfile
    import zipfile
    
    tmpdirname = tempfile.mkdtemp()
    
    zf = zipfile.ZipFile('/path/to/zipfile.zip')
    
    for fn in zf.namelist():
        temp_file = tmpdirname+"/"+fn
        #print(temp_file)
    
        f = open(temp_file, 'w')
        f.write(zf.read(fn).decode('utf-8'))
        f.close()
    
    0 讨论(0)
提交回复
热议问题