Python2:如何从 dssp 文件中提取一列并将其放入新文件中?

Python2:如何从 dssp 文件中提取一列并将其放入新文件中?

我有一个非常混乱的问题,我真的需要你的帮助。我的文件夹中有很多 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 文件。

先感谢您。

相关内容