Mis a jour le 2026-10-31, 14:44

gffutils

Permet de créer une base sqlite à partir d'un gff3 (ou gtf) et de l'utiliser (faire import gffutils)
Création de la base :
  • db = gffutils.create_db('myFile.gff3', 'output.db')
  • on peut ensuite l'utiliser avec db = gffutils.FeatureDB('sample.db')
Boucler sur toutes les features (i.e. lignes du gff) :
  • for feat in gffutils.DataIterator(db) ...
  • ou aussi : feat in db.all_features()) ...
Features :
  • sont de type de type gffutils.feature.Feature
  • on peut faire print(feat) pour voir toute la feature.
  • feat.chrom, feat.start, feat.end, feat.featuretype, feat.id, feat.strand (strand est '+', -' ou '.')
  • feat.attributes :
    • ce sont les attributes présents dans le dernier champ du gff et il est de type gffutils.attributes.Attributes
    • se comporte un peu comme un dictionnaire : feat.attributes.keys(), feat.attributes.values() et les valeurs sont toujours des listes (par défaut)
    • différents champs :
      ID: ['exon:ENST00000832824.1:1']
      Parent: ['ENST00000832824.1']
      gene_id: ['ENSG00000290825.2']
      transcript_id: ['ENST00000832824.1']
      gene_type: ['lncRNA']
      gene_name: ['DDX11L16']
      transcript_type: ['lncRNA']
      transcript_name: ['DDX11L16-260']
      exon_number: ['1']
      exon_id: ['ENSE00004248723.1']
      level: ['2']
      tag: ['TAGENE']
      	  
  • récupération de la séquence correspondant à une feature : one donne le fichier fasta de la séquence complète correspondante :
    • feat.sequence('sequence.fas')
    • feat.sequence('sequence.fas', use_strand = True) : la séquence est reverse-complémentée si elle est sur le brin moins (c'est le défaut)
Tous les types de feature du fichier :
for featureType in db.featuretypes():
  print(featureType)
  
Hierarchie des features :
  • Quand on a une feature, on peut récupérer ses parents ou ses enfants, ici au niveau 1 (par défaut, tous les niveaux, donc pour un gène, les transcrits et les exons)
    for feat2 in db.parents(feat, level = 1):
      print('  ', feat2.id, feat2.featuretype)
          
  • même principe avec les enfants : db.children(feat)
  • au lieu d'indiquer le niveau souhaité, on peut indiquer le type : db.children(feat, featuretype = 'exon') ou aussi db.children(feat, featuretype = ['exon', transcript'])
Récupérer les features sur une région :
  • for feat in db.region(('chr1', 15000, 20000)) ... : récupère les features overlappantes.
  • on peut aussi faire db.region(seqid = 'chr1', start = 15000, end = 20000) (si start ou end vaut None, pas de limite de ce côté-là)
  • db.region(seqid = 'chr1', start = 15000, end = 20000, completely_within = True) : la feature doit être complètement incluse. Beaucoup plus rapide.
basic :
  • les features qui sont bien caractérisées ont un ag "basic" dans la liste de leurs tags
  • mais c'est seulement valale pour les features de type transcript, CDS, exon, start_codon, stop_codon, five_prime_UTR et three_prime_UTR

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert