You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现将旧版本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")

代码说明

  1. 目录处理:用os.makedirs(target_dir, exist_ok=True)确保目标目录存在,无需手动提前创建。
  2. 文件筛选:用os.scandir替代os.listdir,更高效地判断文件类型,只保留PDF文件。
  3. 版本解析:通过正则表达式匹配带Rev版本的文件名,提取基础编号和版本字母;不带版本的文件直接跳过(留在原目录)。
  4. 分组与筛选:将同一基础编号的文件分组,按版本字母排序后,保留最后一个(最新版),其余移动到目标目录。
  5. 移动逻辑:用shutil.move完成文件移动,同时打印移动日志方便跟踪。

内容的提问来源于stack exchange,提问作者RafaelTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:07:09