【问题标题】:Search and import multiple words from txt file on Biopython在 Biopython 上从 txt 文件中搜索并导入多个单词
【发布时间】:2015-04-10 22:45:02
【问题描述】:

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

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

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

Biopython 中是否有任何简单的方法可以做到这一点?

谢谢

【问题讨论】:

  • 总是以P开头吗?还是 O 也这么认为?它总是以大写字母开头,后跟整数还是浮点数(在 O 的情况下,它看起来像浮点数)?如果有的话,这里的大多数人已经好几年没有做过生物信息学了
  • @Joran 登录 ID 可能会有很大差异。 sp 是 SwissProt 登录 ID,这是我认为 OP 想要的。一般来说,. 之后的数字是修订版,所以我猜他/她想要sp| 之后的所有内容到第一个.。这纯粹是猜测,Biopython 有更简单的方法。
  • 还有一件事——这些信息只会出现在以>开头的一行上。
  • 啊,我纠正了一个人对生物信息学的了解很多:P
  • 是的,我实际上是生物技术研发领域的科学家。我只是业余时间的书呆子:)

标签: biopython fasta


【解决方案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)将返回完全相同的结果。

【讨论】:

  • 比你@leekaiinthesky,这正是我想要的。
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的回答,但有问题。我不知道def 是什么,因为它在文本中有所不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多