如何用Python从多层目录的Zip文件中提取指定KMZ文件
从多层目录Zip中提取指定文件到同一文件夹
可以使用Python标准库中的zipfile模块实现需求,无需额外安装第三方包。核心思路是遍历Zip文件内的所有条目,筛选出目标.kmz文件,然后将它们提取到指定目录,同时忽略原有的多层目录结构。
代码实现
import zipfile import os # 配置路径 zip_file_path = "your_archive.zip" # 替换为你的Zip文件路径 target_dir = "extracted_kmz_files" # 目标文件夹,不存在则自动创建 # 创建目标文件夹 os.makedirs(target_dir, exist_ok=True) # 定义需要提取的目标文件名 target_files = {"file1.kmz", "file2.kmz", "file3.kmz"} with zipfile.ZipFile(zip_file_path, 'r') as zip_ref: # 遍历Zip内的所有文件条目 for file_info in zip_ref.infolist(): # 获取文件名(不含路径) file_name = os.path.basename(file_info.filename) # 判断是否是目标文件,且不是目录 if file_name in target_files and not file_info.is_dir(): # 提取文件到目标目录,arcname指定保存的文件名(去除原路径) zip_ref.extract(file_info, target_dir, arcname=file_name) print(f"已提取: {file_name}") print("所有目标文件提取完成")
关键说明
os.makedirs(target_dir, exist_ok=True):确保目标文件夹存在,exist_ok=True避免文件夹已存在时抛出异常。zip_ref.infolist():获取Zip文件内所有条目的详细信息,包括路径、是否为目录等。os.path.basename(file_info.filename):从完整路径中提取纯文件名,用于匹配目标文件。arcname=file_name:指定提取后的文件名,这样文件会直接保存到目标目录,而不是还原原有的多层子目录。- 加入
not file_info.is_dir()判断,避免误提取同名目录(如果存在的话)。
扩展优化
如果需要提取所有.kmz文件而非指定三个,可修改判断条件为:
if file_name.endswith(".kmz") and not file_info.is_dir():
内容的提问来源于stack exchange,提问作者Ali Fathalian
相关产品推荐
相关产品推荐

