从genbank文件中按功能拉出dna序列

时间:2015-04-23 21:47:08

标签: python-2.7 biopython

我有genbank文件,包含多个带注释的重叠群。我想做的是将其分成一个数据库,该数据库包含含有每个'CDS'特征的单个基因记录,以及它的dna和氨基酸序列。到目前为止,这很好用:

for record in SeqIO.parse(open_file, 'gb'):
   for feature in record.features:
        if feature.type == 'CDS':
            gene_record = {
                'locus_tag':feature.qualifiers['locus_tag'][0],
                'translation':feature.qualifiers['translation'][0],
                }

我遇到的麻烦就是获得dna序列。 genbank文件的格式如下:

FEATURES             Location/Qualifiers
     source          1..29869
                     /organism="Arthrobacter"
                     /mol_type="genomic DNA"
                     /strain="strain_name"
     gene            complement(4..462)
                     /locus_tag="ArthroDRAFT_00001"
     CDS             complement(4..462)
                     /locus_tag="ArthroDRAFT_00001"
                     /product="hypothetical protein"
                     /translation="LSTGKELLNYQSALNDIHDEFSRAQQSDAGVSHLSVAKITEKLS
                     YLKATALQMDDLFSVLRKQGVSLRSTGLADWASVPTIQDDKEEGKTEPSLAKKEISSR
                     TTSKPNKIDFPKFEYPDHGQPTNKIRVGTILDTFSESAFSYEWINVALQD"
     gene            complement(1126..1842)
                     /locus_tag="ArthroDRAFT_00002"
     CDS             complement(1126..1842)
                     /locus_tag="ArthroDRAFT_00002"
                     /product="hypothetical protein"
                     /translation="VPRAFIYGSCVGGDTANVFPSDWDRPTYVARQSIISAAFGPTSV
                     EGDIELTSAFQRSMLEGDIEATAFPRLRQELPTHDVLILDIVDERLGVYELAPGKYLT
                     RSMELISSKLIGKQPVTPRLIEFGSDEHYGLWTRSVDMLVDVVKHGGIPVFALLPPWS
                     EKSIQGEDLTWHSVSVDLMNNKYARYNEYLVQSEFTVVTVPDEEALGDAEHKWGLAPF
                     HYTESVYESLRDQILVGVSS"
...etc

ORIGIN
        1 ccctcaatcc tgaagagcca cattgatcca ttcgtatgag aatgcagatt ccgagaatgt
       61 atcaagaatt gttcctacac gtattttgtt tgtcggctgg ccgtggtccg gatactcaaa
      121 ttttggaaag tcaatcttgt ...

所以,我有每个功能的位置,但我需要以某种方式解析dna序列以拉出正确的dna序列,我有点不知道如何做到这一点。 feature.location给了我一些看似有用的输出:

[3:462](-)
[1125:1842](-)
[2159:3755](-)
[5190:5532](-)
[6226:6493](+)

但我知道使用它的唯一方法是使用正则表达式解析它,然后执行record.seq[start_num:finish_num]。然后,如果它在 - strand上,运行通过reverse_complement的任何内容。

这似乎太复杂了,我认为biopython必须有一个更有效的方式,但我似乎无法找到它。我注意到feature.location似乎已经减去了1来计算python的0索引,所以这个数字必须是可用的......对吗?

编辑:SeqFeature.location似乎是我想要使用的,但无法弄清楚如何:COUNT function

EDIT2:看起来我可以做到

record.seq[feature.location.start:feature.location.end]

这虽然不适用于负绞线的东西......

2 个答案:

答案 0 :(得分:1)

好的,没关系 - 更多谷歌搜索和实验让我找到了更好的解决方案。不确定它是否是最好的解决方案,我会留下问题并且无人接听,以防任何人有更好的想法。我做的DNA序列如下:

if feature.location.strand == 1:
    dna_seq = record.seq[
        feature.location.start:feature.location.end
    ]
elif feature.location.strand == -1:
    dna_seq = record.seq[
        feature.location.start:feature.location.end
    ].reverse_complement()

不是最漂亮的解决方案,但似乎有效...

答案 1 :(得分:1)

我使用位置对象的“提取”方法。

dna_seq = feature.location.extract(record)

这很好用。