Python 解压缩文件夹和子文件夹中的文件
我尝试解压缩150个zip文件。所有的zip文件都有不同的名称,它们都分布在一个大文件夹中,这个文件夹分为许多子文件夹和子文件夹。我想将每个存档文件解压缩到单独的文件夹中,该文件夹与原始zip文件名同名,并且与原始zip文件位于同一位置。我的代码是: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
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()