如何用PCcli命令批量生成数百条多肽的PDB坐标文件?
批量生成多肽PDB文件的问题与解决方法
问题描述
我使用PeptideConstructor工具的PCcli命令可以单条生成多肽的.pdb文件,单条命令用法如下:
pip install PeptideConstructor PCcli -s AaDdKSQym -o output.pdb
现在我有一个存储在PeptideSequences.csv文件中的100条多肽序列列表,序列位于Sequences列。我用pandas读取了数据:
import pandas as pd df = pd.read_csv("PeptideSequences.csv")
尝试用循环批量生成对应PDB文件时,以下代码报语法错误:
for i in range(100): PCcli -s str(df.loc[i,'Sequences']) -o str(df.loc[i,'Sequences']).pdb
问题根源
Python无法直接识别代码中的PCcli命令,会将其视为未定义的变量,这就是语法错误的原因。要在Python中执行系统命令,必须借助subprocess模块。
解决方案
方法1:用subprocess调用PCcli命令
通过Python的subprocess模块执行系统命令,是最直接的适配方案:
import pandas as pd import subprocess df = pd.read_csv("PeptideSequences.csv") # 遍历所有序列 for seq in df['Sequences']: # 跳过空序列或空白序列,避免报错 if pd.notna(seq) and seq.strip(): clean_seq = seq.strip() # 构造命令参数列表(推荐用列表形式,避免字符串拼接的安全问题) cmd = [ "PCcli", "-s", clean_seq, "-o", f"{clean_seq}.pdb" ] # 执行命令,check=True会在命令出错时抛出异常 subprocess.run(cmd, check=True)
方法2:直接使用PeptideConstructor的Python API(更高效)
该工具本身提供了Python接口,无需调用命令行,批量处理速度更快、稳定性更高:
import pandas as pd from PeptideConstructor import PeptideBuilder df = pd.read_csv("PeptideSequences.csv") for seq in df['Sequences']: if pd.notna(seq) and seq.strip(): clean_seq = seq.strip() # 初始化多肽结构 peptide = PeptideBuilder.initialize_residue(clean_seq[0]) # 逐个添加氨基酸残基 for res in clean_seq[1:]: PeptideBuilder.add_residue(peptide, res) # 保存为PDB文件 PeptideBuilder.save_pdb(peptide, f"{clean_seq}.pdb")
优化方案:避免重复序列覆盖文件
如果CSV中存在重复序列,直接用序列名作为文件名会覆盖已有文件,可以给每条序列添加编号:
import pandas as pd import subprocess df = pd.read_csv("PeptideSequences.csv") # enumerate给序列加序号,start=1让编号从1开始 for idx, seq in enumerate(df['Sequences'], start=1): if pd.notna(seq) and seq.strip(): clean_seq = seq.strip() output_filename = f"peptide_{idx}_{clean_seq}.pdb" cmd = ["PCcli", "-s", clean_seq, "-o", output_filename] subprocess.run(cmd, check=True)
内容的提问来源于stack exchange,提问作者Yuval
相关产品推荐
相关产品推荐

