批量修改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
相关产品推荐
相关产品推荐

