如何实现将旧版本PDF文件移动至指定目录?函数开发求助
完善后的
clean_folder 函数实现 核心思路
要完成需求,需要先对PDF文件按「基础编号」分组,识别每组内的版本号(Rev A/B/C...),筛选出最新版本后,将其余旧版本移动到目标目录。同时要处理以下细节:
- 自动创建目标目录(避免目录不存在导致移动失败)
- 仅处理PDF文件,排除目录和其他格式文件
- 兼容不带版本号的PDF(直接保留在原目录)
完整代码
import os import shutil import re def clean_folder(folder_selected): # 定义目标目录并确保其存在 target_dir = os.path.join(folder_selected, "Old PDF Drawings") os.makedirs(target_dir, exist_ok=True) # 筛选出目录下的PDF文件,排除目标目录本身 pdf_files = [] for entry in os.scandir(folder_selected): if entry.is_file() and entry.name.lower().endswith(".pdf"): pdf_files.append(entry.name) # 用字典按基础编号分组,存储每个编号对应的(版本号, 文件名) file_groups = {} # 正则匹配:捕获基础名称和Rev版本(支持"XXX-Rev A.pdf"或"XXX Rev B.pdf"格式) version_pattern = re.compile(r"(.*?)(?:-?Rev\s*([A-Z]))\.pdf$", re.IGNORECASE) for file_name in pdf_files: match = version_pattern.match(file_name) if match: base_name = match.group(1).strip() rev_version = match.group(2).upper() # 加入分组字典 if base_name not in file_groups: file_groups[base_name] = [] file_groups[base_name].append((rev_version, file_name)) else: # 不带Rev版本的文件,直接标记为无需移动 continue # 遍历每个分组,找出最新版本,移动旧版本 for base_name, versions in file_groups.items(): # 按版本字母排序,最后一个就是最新版(A < B < C...) versions_sorted = sorted(versions, key=lambda x: x[0]) latest_file = versions_sorted[-1][1] # 移动该分组内除最新版外的所有文件 for version, file_name in versions: if file_name != latest_file: source_path = os.path.join(folder_selected, file_name) target_path = os.path.join(target_dir, file_name) shutil.move(source_path, target_path) print(f"已移动旧版本文件: {file_name}") # 示例调用(替换为你的目标目录) # clean_folder("/path/to/your/folder")
代码说明
- 目录处理:用
os.makedirs(target_dir, exist_ok=True)确保目标目录存在,无需手动提前创建。 - 文件筛选:用
os.scandir替代os.listdir,更高效地判断文件类型,只保留PDF文件。 - 版本解析:通过正则表达式匹配带Rev版本的文件名,提取基础编号和版本字母;不带版本的文件直接跳过(留在原目录)。
- 分组与筛选:将同一基础编号的文件分组,按版本字母排序后,保留最后一个(最新版),其余移动到目标目录。
- 移动逻辑:用
shutil.move完成文件移动,同时打印移动日志方便跟踪。
内容的提问来源于stack exchange,提问作者RafaelTech
相关产品推荐
相关产品推荐

