1

我有一个大约 145000 个条目的 .fasta 文件(基本上是 .txt),其格式如下

>gi|393182|gb|AAA40101.1| cytokine [Mus musculus]
MDAKVVAVLALVLAALCISDGKPVSLSYRCPCRFFESHIARANVKHLKILNTPNCALQIVARLKNNNRQV
CIDPKLKWIQEYLEKALNKRLKM

>gi|378792467|pdb|3UNH|Y Chain Y, Mouse 20s Immunoproteasome
TTTLAFKFQHGVIVAVDSRATAGSYISSLRMNKVIEINPYLLGTMSGCAADCQYWERLLAKECRLYYLRN
GERISVSAASKLLSNMMLQYRGMGLSMGSMICGWDKKGPGLYYVDDNGTRLSGQMFSTGSGNTYAYGVMD
SGYRQDLSPEEAYDLGRRAIAYATHRDNYSGGVVNMYHMKEDGWVKVESSDVSDLLYKYGEAAL

>gi|378792462|pdb|3UNH|T Chain T, Mouse 20s Immunoproteasome
MSSIGTGYDLSASTFSPDGRVFQVEYAMKAVENSSTAIGIRCKDGVVFGVEKLVLSKLYEEGSNKRLFNV
DRHVGMAVAGLLADARSLADIAREEASNFRSNFGYNIPLKHLADRVAMYVHAYTLYSAVRPFGCSFMLGS
YSANDGAQLYMIDPSGVSYGYWGCAIGKARQAAKTEIEKLQMKEMTCRDVVKEVAKIIYIVHDEVKDKAF
ELELSWVGELTKGRHEIVPKDIREEAEKYAKESLKEEDESDDDNM
  1. 我有一个 gi 的列表(| 之后列出的第一个数字)。
  2. 对于给定的测试,此列表的大小在 60 - 600 gi 之间变化
  3. 我想返回一个包含这些 gi 各自物种的列表
  4. 物种名称通常在第一个示例中看到(用方括号 [Mus musculus] 括起来)并不总是存在。
  5. 顺序不是特别重要。

我一直在使用各种 BioPython 解析点点滴滴,但我认为由于搜索的大小它失败了。我希望这里有人知道更有效的方法?

提前致谢!

4

3 回答 3

5

与其解析物种的不完全一致的 FASTA 标题行,不如提取 GI 编号,然后查找 NCBI 分类 ID,例如参见http://lists.open-bio.org/pipermail/biopython/2009- June/005304.html - 您可以从出租车中获得物种名称、通用名称、血统等。请参阅ftp://ftp.ncbi.nih.gov/pub/taxonomy/taxdump_readme.txt或者如果您更喜欢在线解决方案,Entrez Utilities (EUtils) 是另一种选择。

于 2012-04-04T11:51:15.203 回答
1

如果没有数据可以试用,我建议最快的方法是将gi您想要的加载到集合中。然后用最少的处理量读取 fasta 文件以提取gi行中的 gi,然后如果 gi 在想要的集合中,则提取最后一个|分隔字段。

例如:

# assuming gi list is in a file, one per line
with open('lookup_list.txt','r') as f:
  wanted = set(x.strip() for x in f)

with open('data.fasta','r') as f:
  for line in f:
    if line and line[0] == '>':
      gi = line[4:line.find('|',4)]
      if gi in wanted:
        text = line[line.rfind('|')+1:] # Now process the text to extract species
        print text

如何从描述字段中提取物种名称将取决于您找到的各种格式。

于 2012-04-04T11:21:10.560 回答
1

真的,真的很天真的方法

with open('my.fasta') as fd:
    for line in fd:
        if line.startswith('>'):
            if '[' in line:
                gi=line.split('|')[1]
                name=line.split('[')[-1]
                print gi, name[:-2]

对于上述内容,输出为:

393182 Mus musculus
于 2012-04-04T11:29:10.170 回答