#python#生物信息学 提取文本某列信息 #提取氨基酸序列并且提取氨基酸结构序列与之对应

发布于:2022-12-13 ⋅ 阅读:(580) ⋅ 点赞:(0)

我们有一下文本:dssp1a45.dssp

        要求提取出文本中氨基酸序列的名称和结构,并是他们整行相互对应,其中结构序列中的空格 用'_'代替。

        输出格式为两行信息:GKITFYEDRGFQGRHYECSSDHSNLQPYFSRCNSIRVDSGCWMLYEQPNFQGPQYF...
_EEEEEEETTTEEEEEEE_S_BS__TTT_S__SEEEEEESEEEEESSGGG...

     

 拿到文本文件.dssp(类似于.txt)

我们发现我们的目的信息在文本文件中的红色区域的蓝色框中,其余信息全部都是不需要的,我们要把其余区域清除掉,提取出这两列信息,并且对应输出,这便是思路!

第一步:

file = open('dssp1a45.dssp','r')            #以读取方式打开文件
str = ''.join(file.readlines()[28:])        # 删除检索内容以外的首部
file2 = open('new.txt','w')                 #将删除后的文件写入new.txt
file2.write(str)
f = open("new.txt",'r')

我们这时候把红色区域上面的多余部分就排除掉了。

其中file.readlines()[28:]表示读取文件28行以下的内容 即为红色区域。

str=''.join()  表示把括号内的列表强制转换成字符串str,并且元素间不加任何分隔符。

之后再创建一个file2:new.txt。

将str写入new.txt.并用接收可读来打开他

第二步:

我们得到的new.txt文件如下,自动保存在我们的相同目录内。

一会儿用完再删除,卸磨杀驴!

所以接下来我们提取这里面的三/四两列信息出来就欧克了

注意这个是字符串文本,表面上看是3/4两列,其实不是,中间有空格,好好数数应该是第14列和第17列,迭代提取出来!

a = f.readlines()                           #对文本f进行列表迭代
acid = 13
stucture = 16                               #找到氨基酸和结构所在列数
aa =""                                      #预定义两个空字符串空间来存放氨基酸序列和结构序列
stc=""
i = 0
for line in a:                              #迭代每个行列表,并提取氨基酸和结构所对应的列元素
    aa  += a[i][acid]
    stc += a[i][stucture]
    for b in stc:                           # 迭代结构序列
        new_name = stc.replace(" ", '_')    # 将结构序列中的空格改成下划线
    i+=1
final = aa+ '\n' +new_name                  #计算结果
print(final)                                #打印结果

        注释非常明确。

        值得注意的是,其实在python中处理字符串就相当于是在C中对数组进行处理,这里面类似二维数组的一个处理方式我们的a[i]表示的是每一整行。

a[i][j]表示的是第i行第j个元素,通过数元素我们发现氨基酸和对应结构的j的值是14和17,

对应的j应该是13和16,

所以我们迭代出每行的氨基酸和对应结构就很容易了。

然后我们把读取到的氨基酸和结构序列分别存放到一个空的字符串aa和stc里面。

        修改空格成为'_' :我们引入了第二个for循环,目的是把stc里面读到的空格修改,所以对stc进行迭代,用replace函数进行修改以后,将新的修改好的字符串存入new_name字符串中,所以我们最后的修改好的结构序列和氨基酸序列进行final的运算(如代码框内所示),就可以得到如下结果了:

第三步:

收尾工作要做好

file3=open('dssp1a45.ss','w')
file3.write(final)                          #将最后的结果写入file3并保存为dssp1a45.ss
file3.close()                               #注意关闭使用过的所有文件!
f.close()
file2.close()
file.close()
#import os                                    调用os
# os.remove('new.txt')                        #所有文件关闭后,删除辅助操作用的文件

我们可以把我们得到的结果这样写入一个文件中,最后关闭掉我们中途使用过的文件,并且把过度文件new.txt删除,我们的目录就会非常干净了!

本文含有隐藏内容,请 开通VIP 后查看