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

如何批量重命名特定命名模式的文件夹文件?脚本仅改部分文件求助

解决PDB文件批量重命名仅部分成功的问题

可能导致仅部分文件重命名成功的原因

  • 重复目标文件名:如果多个原文件拆分后得到相同的蛋白ID(即parts[1]),重命名时会因目标文件已存在抛出异常,导致这类文件被跳过
  • 文件名匹配逻辑局限:原脚本的startswith和endswith匹配,无法处理文件名存在大小写差异(如.PDB结尾)或中间额外-字符的情况
  • 潜在的目录遍历问题:虽然os.listdir会先获取完整文件列表,但如果脚本运行中有其他程序修改目录,可能导致部分文件未被处理

改进后的重命名脚本

import os
import re

directory = r'\\...'  # 替换为你的目标目录路径

# 先收集所有符合命名规则的文件
target_files = []
# 用正则精准匹配文件名格式,提取中间的蛋白ID,同时兼容大小写
filename_pattern = re.compile(r'^AF-([A-Z0-9]+)-F1-model_v4\.pdb$', re.IGNORECASE)
for filename in os.listdir(directory):
    match_result = filename_pattern.match(filename)
    if match_result:
        target_files.append((filename, match_result.group(1)))

# 批量执行重命名
for old_filename, protein_id in target_files:
    old_file_path = os.path.join(directory, old_filename)
    new_filename = f"{protein_id}.pdb"
    new_file_path = os.path.join(directory, new_filename)
    
    # 处理重复文件名:自动添加编号避免覆盖或报错
    counter = 1
    while os.path.exists(new_file_path):
        new_filename = f"{protein_id}_{counter}.pdb"
        new_file_path = os.path.join(directory, new_filename)
        counter += 1
    
    try:
        os.rename(old_file_path, new_file_path)
        print(f"完成重命名: {old_filename} -> {new_filename}")
    except Exception as e:
        print(f"重命名失败 {old_filename}: {str(e)}")

脚本改进说明

  1. 精准的文件名匹配:用正则表达式替代简单的首尾匹配,确保仅匹配完全符合规则的文件,同时兼容大小写差异
  2. 预收集目标文件:先把所有符合条件的文件收集到列表再统一处理,避免遍历过程中目录变化带来的干扰
  3. 重复文件名处理:自动为重复的目标文件名添加编号,不会因文件已存在而跳过重命名
  4. 高效的重命名操作:用os.rename替代shutil.move,同一目录下重命名更轻量高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:30:45