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

批量修改pdbqt文件名:移除uff开头子串并保留_out.pdbqt

问题描述

我有一个文件夹,其中包含多个命名格式如下的pdbqt文件:

4474_uff_E=443.36_out.pdbqt
AQbtc_uff_E=443.36_uff_E=396.28_uff_E=391.20_out.pdbqt
5770_uff_E=859.40_out.pdbqt
5770_uff_E=859.40_uff_E=859.31_out.pdbqt
Nice_uff_E=379.35_uff_E=367.83_uff_E=367.27_uff_E=367.26_out.pdbqt
Weird_and_funny_compound_uff_E=300.77_uff_E=299.90_out.pdbqt

我希望移除文件名中所有以uff开头的部分,保留out.pdbqt后缀。例如将AQbtc_uff_E=443.36_uff_E=396.28_uff_E=391.20_out.pdbqt修改为AQbtc_out.pdbqt。

我已有一个为文件名添加_out后缀的Python脚本:

import sys
import glob
import re
import os
from os.path import dirname
files = glob.glob('**/*.pdbqt', recursive = True)
for file in files:
    name = os.path.splitext(file)[0]
    os.rename(name+".pdbqt", name+"_out.pdbqt")

但不知如何修改该脚本以实现需求,恳请提供相关指导。

修改后的脚本及说明

以下是修改后的Python脚本,核心通过正则表达式精准匹配并移除目标片段:

import glob
import re
import os

# 递归获取所有pdbqt格式文件
files = glob.glob('**/*.pdbqt', recursive=True)

for file in files:
    # 分离文件目录与文件名,避免路径被误修改
    dir_path, filename = os.path.split(file)
    # 提取不带后缀的文件名主体
    name_without_ext = os.path.splitext(filename)[0]
    
    # 正则替换:移除所有`_uff_E=xxx`格式的片段
    # 正则逻辑:匹配`_uff_E=`前缀 + 任意数字/小数点组合
    cleaned_name = re.sub(r'_uff_E=[\d.]+', '', name_without_ext)
    
    # 拼接新文件名与完整路径
    new_filename = f"{cleaned_name}.pdbqt"
    new_file_path = os.path.join(dir_path, new_filename)
    
    # 可选:先打印重命名前后对照,确认逻辑正确再执行重命名
    print(f"{file} -> {new_file_path}")
    
    # 执行文件重命名
    os.rename(file, new_file_path)

关键细节:

  • 用os.path.split分离目录和文件名,确保递归扫描子文件夹时路径不会出错
  • 正则表达式r'_uff_E=[\d.]+'能精准匹配所有需要移除的uff相关片段,全局替换为空即可完成清理
  • 建议先保留print语句验证结果,确认无误后再执行os.rename操作,避免误修改文件

内容的提问来源于stack exchange,提问作者Phung Hien Le

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:36