在 Biopython 上从 txt 文件中搜索并导入多个单词

Search and import multiple words from txt file on Biopython

好吧,我有一个 FASTA 文件,其中有一些关于 .txt 中蛋白质的信息,我想搜索 "string" 之后的模式和导入 it/write 它到另一个 txt。它是这样的:

>gi|1168222|sp|P46098.1|
....(text)...
>gi|74705987|sp|O95264.1|
....(text)...

并且我想得到所有的入藏号(acc):sp|**P46098**.1|然后将它们保存在另一个文件中的一个列中。整个文本中有不同的 acc,我想要的是 sp| 之后和 . 之前的内容,或者如果它没有 . 是下一个 [= 之前​​的内容15=].

Biopython 中有没有简单的方法可以做到这一点?

谢谢

听起来您想使用 lookbehinds。要使用 link 中的示例:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'

在每一行中,您将要匹配的模式放在后视中(即 abc 所在的位置),以及您想要捕获的内容放在后面的位中(即 def 是).

这个答案在可能的范围内使用了 Biopython,然后对其余部分使用正则表达式(Biopython 将为您获取 ID,但不会单独获取登录号):

from Bio import SeqIO
import re

with open('output.txt', 'w') as outFile: # open for writing
    for i in SeqIO.parse('input.txt', 'fasta'): # parse as FASTA
        m = re.search('sp\|(.*)\|', i.id) # look for sp|.*| in the id
        if m:
            outFile.write(m.group(1).split('.')[0] + '\n') # take only what's before the first dot, if any

给外行的注意事项:'w' 覆盖任何以前存在的文件,而 'a' 附加到它。

另请注意,仅在整个文本上使用正则表达式匹配自身(不首先使用 Biopython 解析出 FASTA id)会return 完全相同的结果。