Python如何读取未知文件名的Zip文件并实现内容自动分类?
问题解决方案
错误原因
glob() 返回的是匹配到的所有ZIP文件路径的列表,而 ZipFile 构造函数需要传入单个文件路径字符串,直接传列表就会触发 AttributeError。另外代码里还有个问题:你调用的是 ZipFile.namelist() 类方法,正确的应该用实例对象 read_zip 来调用。
修复后的代码方案
情况1:目录中每次只有一个ZIP文件
直接取列表的第一个元素(确保目录里确实只有一个zip):
from zipfile import ZipFile from glob import glob import os import shutil # 替换成你要移动到的目标目录路径 target_dir = r"C:\me\Python\target_folder" # 获取所有zip文件路径 zip_paths = glob(r"C:\me\Python\map_dumper\*.zip") if zip_paths: # 取第一个匹配到的zip文件 zip_path = zip_paths[0] with ZipFile(zip_path, "r") as read_zip: # 创建临时提取目录 temp_extract_dir = r"C:\me\Python\temp_extract" read_zip.extractall(temp_extract_dir) # 将提取的内容移动到目标目录 for root, dirs, files in os.walk(temp_extract_dir): for file in files: src_path = os.path.join(root, file) # 保持原压缩包内的目录结构 rel_path = os.path.relpath(src_path, temp_extract_dir) dest_path = os.path.join(target_dir, rel_path) # 创建目标子目录(如果不存在) os.makedirs(os.path.dirname(dest_path), exist_ok=True) shutil.move(src_path, dest_path) # 清理临时目录 shutil.rmtree(temp_extract_dir) else: print("目录中未找到ZIP文件")
情况2:目录中有多个ZIP文件,需要逐个处理
遍历glob返回的列表,逐个处理每个zip:
from zipfile import ZipFile from glob import glob import os import shutil target_dir = r"C:\me\Python\target_folder" zip_paths = glob(r"C:\me\Python\map_dumper\*.zip") for zip_path in zip_paths: with ZipFile(zip_path, "r") as read_zip: # 为每个zip创建独立的临时提取目录 zip_name = os.path.basename(zip_path).replace(".zip", "") temp_extract_dir = os.path.join(r"C:\me\Python\temp_extract", zip_name) read_zip.extractall(temp_extract_dir) # 移动文件到目标目录 for root, dirs, files in os.walk(temp_extract_dir): for file in files: src_path = os.path.join(root, file) rel_path = os.path.relpath(src_path, temp_extract_dir) dest_path = os.path.join(target_dir, rel_path) os.makedirs(os.path.dirname(dest_path), exist_ok=True) shutil.move(src_path, dest_path) shutil.rmtree(temp_extract_dir) # 可选:处理完后删除原ZIP文件 # os.remove(zip_path)
关键注意点
- 确保目标目录和临时目录有读写权限
- 如果不需要保持原压缩包内的目录结构,可以直接提取到目标目录,跳过相对路径处理
- 临时目录用于避免直接提取时的文件冲突,处理完成后记得清理
内容的提问来源于stack exchange,提问作者Dennis Heemskerk
相关产品推荐
相关产品推荐

