编程语言
首页 > 编程语言> > 在Python中使用ASCII文件中的注释查找/替换子字符串

在Python中使用ASCII文件中的注释查找/替换子字符串

作者:互联网

在我正在研究的生物信息学项目中,我遇到了一些编码问题.基本上,我的任务是从数据库中提取基序序列并使用该信息来注释序列比对文件.对齐文件是纯文本,因此注释不会是任何复杂的,最好只是用对齐文件本身中的星号替换提取的序列.

我有一个脚本扫描数据库文件,提取我需要的所有序列,并将它们写入输出文件.鉴于查询,我需要读取这些序列并将它们与ASCII对齐文件中相应的子字符串相匹配.最后,对于每个出现的主题序列(一个非常大的字符串的子串),我会用一系列星号*替换主题序列XXXXXXX.

我正在使用的代码是这样的(11SGLOBULIN是数据库中蛋白质条目的名称):

motif_file = open('/users/myfolder/final motifs_11SGLOBULIN','r')
align_file = open('/Users/myfolder/alignmentfiles/11sglobulin.seqs', 'w+') 
finalmotifs = motif_file.readlines()
seqalign = align_file.readlines() 


for line in seqalign:
    if motif[i] in seqalign:  # I have stored all motifs in a list called "motif"
        replace(motif, '*****') 

但不是用一系列星号替换每个字符串,而是删除整个文件.谁能明白为什么会这样?

我怀疑问题可能在于我的ASCII文件基本上只是一个很长的氨基酸列表,而且Python不知道如何替换一个非常长的字符串中隐藏的特定子字符串.

解决方法:

像下面这样的东西应该做的伎俩.我已经对您的输入数据做了假设,因为您没有发布样本并且您正在运行python 2.7.

motifs = [ x.strip() for x in open('final motifs_11SGLOBULIN','r') ]
redact = '*****'

with open('11sglobulin.seqs','r') as data_in, open('11sglobulin.seqs.new','w') as data_out:
  for seq in data_in:
    for motif in motifs:
      while True:
        x = seq.find(motif)
        if x >= 0:
          seq = seq[:x] + redact + seq[x+len(motif):]
        else:
          break
  data_out.write(seq)

标签:biopython,python,text-processing,bioinformatics
来源: https://codeday.me/bug/20190903/1797539.html