美文网首页生信Python基因组学
python操作gff格式注释文件的简单小例子

python操作gff格式注释文件的简单小例子

作者: 小明的数据分析笔记本 | 来源:发表于2021-06-19 19:34 被阅读0次

    这里借助biopython模块

    参考链接是 https://biopython.org/wiki/GFF_Parsing

    这里BCBio模块里GFF()函数解析的内容和Bio模块里SeqIO()函数解析的内容很像

    cds和外显子的关系

    cds 是 coding sequence 的缩写

    具体关系看下图 来自链接 https://www.jianshu.com/p/cc5cd7053d6e

    image.png

    开头结尾的外显子区可能会比cds长 ,因为开头结尾的外显子可能包括 UTR,非翻译区

    处于中间的外显子和cds等同

    首先是根据gff文件获取每条染色体的长度
    from BCBio import GFF
    in_handle = open("tunisia.gff",'r')
    for rec in GFF.parse(in_handle):
        for feature in rec.features:
            if feature.type == "region":
                chromo = feature.qualifiers['ID'][0]
                chrid = chromo.split(":")[0]
                chrLen = chromo.split("..")[1]
                print(chrid,chrLen)
    

    这里你的ID可能需要换成其他,这个得根据具体gff文件的内容定

    image.png
    获取gff文件里的基因都有哪些类型
    from BCBio import GFF
    from collections import Counter
    
    biotype = []
    
    in_handle = open("tunisia.gff",'r')
    
    for rec in GFF.parse(in_handle):
        for feature in rec.features:
            if feature.type == "gene":
                biotype.append(feature.qualifiers['gene_biotype'][0])
                
    in_handle.close()
    len(biotype)
    biotype[0:15]
    
    Counter(biotype)
    
    image.png
    统计每个蛋白编码基因有几个转录本

    这里需要记住的是每个feature对应的还有sub_feature这个是和SeqIO解析genbank文件有差别的地方

    gene对应的 sub_featuresmRNA,mRNA对应的sub_featuresexon或者cds

    in_handle = open("pra-2.gff",'r')
    
    for rec in GFF.parse(in_handle):
        for feature in rec.features:
            if feature.type == "gene":
                gene_name = feature.qualifiers["gene"][0]
                i = 0
                for subfeature in feature.sub_features:
                    i = i + 1
                print(gene_name, i)
    
    image.png
    去除指定基因类型的注释文件,

    比如这个例子是去除注释文件中的所有蛋白编码基因

    in_handle = open("tunisia.gff",'r')
    
    fw = open("pra-3.gff",'w')
    
    for rec in GFF.parse(in_handle):
        tmp = rec.features
        i = 0
        index2delete = []
        for feature in rec.features:
            i = i + 1
            if feature.type == "gene" and feature.qualifiers["gene_biotype"][0] == "protein_coding":
                index2delete.append(i-1)
        for counter,index in enumerate(index2delete):
            index = index - counter
            tmp.pop(index)
            
        rec.features = tmp
        GFF.write([rec],fw)
        
    fw.close()
    

    这里用到按照索引删除列表中的元素 ,这个逻辑暂时没有想明白,代码是

    list_given = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    index_to_delete = [1, 3, 6]
    
    for counter, index in enumerate(index_to_delete):
        index = index - counter
        list_given.pop(index)
    ————————————————
    版权声明:本文为CSDN博主「CAAT9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/exm_further/article/details/112251558
    

    好了今天的内容暂时先到这里了

    欢迎大家关注我的公众号

    小明的数据分析笔记本

    小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

    相关文章

      网友评论

        本文标题:python操作gff格式注释文件的简单小例子

        本文链接:https://www.haomeiwen.com/subject/vsddyltx.html