好吧,我有一个 FASTA 文件,它有一些关于.txt中蛋白质的信息,我想搜索一个模式之后的“字符串”并将其导入/写入另一个模式文本。它是这样的:
>gi|1168222|sp|P46098.1|
....(text)...
>gi|74705987|sp|O95264.1|
....(text)...
我希望获得所有入藏号码(acc):sp|**P46098**.1|
然后将它们保存在列中的另一个文件中。整篇文章中有不同的内容,我想要的是在sp|
之后和.
之前或者如果它没有.
之前是|
之前的内容{{1}} 1}}。
在 Biopython 中有没有简单的方法?
由于
答案 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是}。