使用python解压缩文件夹和子文件夹中的zip文件

new*_*GIS 3 python unzip

我尝试解压缩150个zip文件.所有的zip文件都是不同的名称,它们都分布在一个大文件夹中,分成很多子文件夹和子子文件夹.我想将每个存档提取到与原始zip文件名同名的单独文件夹中.与原始zip文件位于同一位置.我的代码是:

import zipfile    
import os,os.path,sys  

pattern = '*.zip'  
folder = r"C:\Project\layers"   
files_process = []  
for root,dirs,files in os.walk(r"C:\Project\layers"):  
    for filenames in files:  
        if filenames == pattern:  
            files_process.append(os.path.join(root, filenames))  
            zip.extract() 
Run Code Online (Sandbox Code Playgroud)

我运行代码后没有发生任何事情.在此先感谢任何帮助.

new*_*GIS 8

更新:

最后,这段代码对我有用:

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]))
Run Code Online (Sandbox Code Playgroud)

  • 使用`os.path.splitext(filename)[0]`而不是`filename.split('.')[0]`如果文件名中有多个点,后者返回错误的结果. (3认同)

jfs*_*jfs 5

您可以使用Path.rglob()递归枚举 zip 文件并shutil.unpack_archive()解压缩 zip 文件:

#!/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')
Run Code Online (Sandbox Code Playgroud)

“将每个存档提取到与原始 zip 文件名相同的文件夹中,并且与原始 zip 文件位于同一位置”,例如,它将'layers/dir/file.zip'存档提取到'layers/dir/file'目录中。