我有一个非常混乱的问题,我真的需要你的帮助。我的文件夹中有很多 dssp 文件。每个 dssp 文件都包含有关蛋白质的信息。此外,我还有一个单独的文件,其中包含用冒号分隔的两列,其中包含 dssp 文件的蛋白质及其各自链的 ID。
dssp 文件的样子如下。dssp_文件
ID 和链文件如下所示。ID 和链
我需要两个 python 脚本来从 dssp 文件中提取两列并将它们放入两个新文件中。
具体来说,我正在寻找的结果是:从 dssp 文件中,考虑 ID 和链文件的蛋白质链(在 dssp 中以蓝色突出显示),我想要创建两个新文件:一个 fasta 文件和一个新的 dssp 文件。
在 fasta 文件中,我想要“>”,蛋白质的 ID(以绿色突出显示),并在一行中显示所有序列(以黄色突出显示),就像普通的 fasta 文件一样。在新的 dssp 文件中,我想要“>”,蛋白质的 ID(再次以绿色突出显示),并在一行中显示蛋白质的结构(以橙色突出显示)。对于结构,我希望转换所有内容,得到如下结果:'H':['H','G','I'], 'E':['B','E'], 'C':['T','S','-','']。
新的 fasta 文件应该是这样的。新fasta文件
新的 dssp 文件应该是这样的。newdssp_文件
这是我写的。我不知道为什么它只给我一个新文件,但只带有 ID,而不是我要求的结构/序列。
import sys
dssp = {'H':['H','G','I'],
'E':['B','E'],
'C':['T','S','-','']}
def read_dssp_file(filename, chain):
structure = ''.strip()
protein_name = ''
i=0
for line in open(filename):
if line[0:6].strip() == "HEADER":
protein_name = line[62:67].strip()
elif i > 27:
if chain == line[11:12].strip():
if line[16:17].strip() in dssp['H']:
structure += 'H'
elif line[16:17].strip() in dssp['E']:
structure += 'E'
elif line[16:17].strip() in dssp['C']:
structure += 'C'
i+=1
return structure, protein_name
def create_dssp_file(data_file):
newfile = open((data_file[1] + ".mdssp").lower(),"w")
newfile.write(">" + data_file[1] + '\n')
newfile.write(data_file[0].strip())
newfile.close()
return newfile
if __name__ == '__main__':
if len(sys.argv)>2:
file1=sys.argv[1]
chain=sys.argv[2]
print create_dssp_file(read_dssp_file(file1, chain))
else:
print 'Program syntax:\npython', sys.argv[0], 'filenames and chain'
这是创建 fasta 文件的代码的一部分。
def read_dssp_file(filename, chain):
sequence = ''.strip()
protein_name = ''
i=0
for line in open(filename,"r"):
if line[0:6].strip() == "HEADER":
protein_name = line[62:67].strip()
elif i > 26:
if chain == line[11:12].strip():
sequence += line[13:14].strip()
i+=1
return sequence, protein_name
此外,由于我必须对文件夹中的每个 dssp 文件执行此操作,因此我不知道如何以递归方式向脚本提供整个文件夹,而不是单个 dssp 文件。
先感谢您。