Python循环中根据输入PDB文件名加后缀生成对应输出文件名的方法
实现方案
核心逻辑是先从输入的pdb文件名中提取不带扩展名的前缀,再按照你需要的命名规则拼接自定义输出文件名,传入对应保存方法的参数即可。
具体修改步骤
- 第一步:拆分文件名获取前缀
在循环内确认文件为pdb格式后,用os.path.splitext()拆分文件名,得到不带.pdb后缀的前缀:base_name = os.path.splitext(f)[0] - 第二步:给四类保存方法分别传入自定义文件名
你用到的ProDy内置保存方法、matplotlib的savefig都支持传入filename参数指定输出路径和名称,直接按照「前缀+自定义标识+扩展名」的格式拼接传入即可。
另外建议把原代码中路径拼接的写法换成os.path.join(),兼容性更好,避免不同操作系统路径分隔符不一致的问题。
修改后的完整代码
#packages from prody import * from numpy import * import numpy as np from matplotlib.pyplot import * import matplotlib.pyplot as plt from pandas import * import pandas as pd import os import os.path ion() # assign directory pdb_directory = '/home/lefebrej95/Documents/PDB' # 如需统一输出到指定目录可以在这里定义输出路径,比如: # output_directory = '/home/lefebrej95/Documents/PDB/output' # os.makedirs(output_directory, exist_ok=True) data_essa = [] # iterate for f in os.listdir(pdb_directory): if f.endswith('.pdb'): # select file that ends with pdb # 拆分获取文件名前缀 base_name = os.path.splitext(f)[0] # 路径拼接改用os.path.join兼容性更好 atoms = parsePDB(os.path.join(pdb_directory, f)) essa = ESSA() essa.setSystem(atoms) essa.scanResidues() essa.getESSAZscores() ### 保存npy文件,可自定义后缀标识 essa.saveESSAZscores(filename=f"{base_name}_essa_zscores.npy") ### 保存csv文件,按你给的示例用_gnm_zs后缀 essa.saveESSAZscorestoCSV(filename=f"{base_name}_gnm_zs.csv") plt.clf() with style.context({'figure.dpi': 100}): essa.showESSAProfile() ### 保存png图片,自定义标识 plt.savefig(f"{base_name}_essa_profile.png") plt.show() ### 保存结果pdb文件,自定义标识 essa.writeESSAZscoresToPDB(filename=f"{base_name}_essa_zscores.pdb")
如果需要调整后缀标识,直接修改字符串拼接部分的内容即可。
内容的提问来源于stack exchange,提问作者Jonathan Lefebre
相关产品推荐
相关产品推荐

