Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解压缩文件夹和子文件夹中的文件_Python_Unzip - Fatal编程技术网

Python 解压缩文件夹和子文件夹中的文件

Python 解压缩文件夹和子文件夹中的文件,python,unzip,Python,Unzip,我尝试解压缩150个zip文件。所有的zip文件都有不同的名称,它们都分布在一个大文件夹中,这个文件夹分为许多子文件夹和子文件夹。我想将每个存档文件解压缩到单独的文件夹中,该文件夹与原始zip文件名同名,并且与原始zip文件位于同一位置。我的代码是: import zipfile import os,os.path,sys pattern = '*.zip' folder = r"C:\Project\layers" files_process = [] for ro

我尝试解压缩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() 
在我运行代码之后,什么也没发生。 提前感谢您在这方面的帮助

您可以使用递归枚举zip文件并解压缩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')
它“将每个存档文件提取到与原始zip文件名同名且与原始zip文件位于同一位置的单独文件夹中”,例如,它将
'layers/dir/file.zip'
存档文件提取到
'layers/dir/file'
目录中。

更新:

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

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]))

将所有文件解压缩到一个临时文件夹(Ubuntu)


使用
zipfile
module:我得到一个错误:回溯(最近一次调用最后一次):文件“D:\desktop\python.py”,第2行,从pathlib导入路径导入错误:使用python 2.7.8没有名为pathlibi的模块shell@Y.Y.C:Python 2有一个
pathlib
的后端口。运行或在何处安装pathlib?@Y.Y.C:只需运行
pip
命令。如果您不知道命令行是什么,或者不知道
pip
命令的作用;问一个单独的问题(或者(更可能)找到一个现有的问题)。使用
os.path.splitext(filename)[0]
而不是
filename.split('.')[0]
如果文件名中有多个点,后者将返回错误的结果。解码假定文件是文本。我鼓励使用
os.path.join(tmpdirname,fn)
您可以将temp_文件作为二进制文件打开,这样就不需要对其进行解码,并使用上下文管理器作为文件句柄,这样就不需要使用
f.close()
,例如使用open(temp_文件,“wb”)打开
作为f:
甚至更好,您可以使用
zipfile.extractall
方法替换
namelist
上的循环,并提供tmpdirname作为路径。但这并不能回答这个问题。这个问题没有提到临时目录,而是问“我想将每个归档文件解压缩到单独的文件夹中,该文件夹与原始zip文件名同名,并且与原始zip文件位于同一位置”
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()