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

时间:2015-04-09 21:59:40

标签: biopython fasta

好吧,我有一个 FASTA 文件,它有一些关于.txt中蛋白质的信息,我想搜索一个模式之后的“字符串”并将其导入/写入另一个模式文本。它是这样的:

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

我希望获得所有入藏号码(acc):sp|**P46098**.1|然后将它们保存在列中的另一个文件中。整篇文章中有不同的内容,我想要的是在sp|之后和.之前或者如果它没有.之前是|之前的内容{{1}} 1}}。

Biopython 中有没有简单的方法?

由于

2 个答案:

答案 0 :(得分:1)

这个答案在可能的范围内使用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)将返回完全相同的结果。

答案 1 :(得分:0)

听起来你想要使用lookbehinds。要使用该链接中的示例:

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

在每一行上,你要在lookbehind中放置你想要匹配的模式(即abc所在的位置),以及你想要在下一位捕获的东西(即{{1是}。