Objectif

On se propose de re-implémenter la commande head (que nous avons précédemment lors des cours sur le language BASH). L’objectif est de créer un programme (sous sa forme la plus simple), capable de:

  • Ouvrir un fichier tabulé.
  • Parcourir le fichier ligne à ligne.
  • Si le numéro de ligne est inférieur ou égal à 10.
    • Imprimer la ligne.

Données

Le Format GTF

Le format GTF est un fichier tabulé (i.e. dont les colonnes sont séparées par des tabulations) qui contient des informations concernant des éléments génomiques (souvent des transcripts et leurs exons). Les informations portées par les colonnes sont les suivantes:

  • Colonne 1 - Nom du chromosome.
  • Colonne 2 - Source de l’annotation.
  • Colonne 3 - Type d’élément (exon, CDS, 5’UTR, 3’UTR,…).
  • Colonne 4 - Position de départ (Start).
  • Colonne 5 - Position de fin (End).
  • Colonne 6 - Score.
  • Colonne 7 - Le brin (+ ou -).
  • Colonne 8 - Frame (0,1,2). ‘0’ indique que la première base de l’élément est la première base d’un codon, ‘1’ que la deuxième base est la première base d’un codon, etc…
  • Colonne 9 - Attribute. Une liste de couples clefs/valeurs séparées par un point virgule.

Visualisez les cinq premières et dernières lignes du fichier avec head et tail

Préparation du notebook

On utilisera ici le notebook jupyter comme éditeur de code. Vous devriez pouvoir lancer le jupyter en utilisant le menu principal du système. Sinon, vous pouvez le lancer en ligne de commande.

Une fois le notebook lancé, dans le menu de gauche, choisissez “new > Python 3”. Une nouvelle fenêtre apparait. Double cliquez sur “Untitled” pour renommer le notebook en “head”.

Solution

On présente ci-dessous quatres solutions. Les quatres solutions sont présentées ci-dessous. Le fichier à lire est toujours refGene_hg38.txt (cf exercice précédent). Les solutions 3 et 4 sont sans doute les plus classiques/élégantes. Prénez le temps de bien analyser le code afin de comprendre les différentes approches.

solution 1

Cette solution fonctionne mais elle est longue puisque l’on parcourra l’ensemble du fichier en faisant un test sur chacune des lignes (on ne s’arrête pas à la dixième ligne).

<< Hide | Show >>

Solution 2

Toujours avec une boucle for mais cette fois ci nous utilisons le module sys afin d’importer la fonction exit() permettant d’arrêter le programme si la condition n’est pas vérifiée.

<< Hide | Show >>

Solution 3

Toujours avec une boucle for mais cette fois ci nous utilisons le mot clef break permettant d’arrêter la boucle si la condition n’est pas vérifiée.

<< Hide | Show >>

Solution 4

On change de point de vue et on utilise une boucle while. Le principe est de dire:

  • Tant que le numero de ligne est inférieur ou égal à 10
    • Lit une ligne.

C’est un peu différent du point de vue de la syntaxe et plus concis A noter l’utilisation de la méthode readline() disponible pour les objets de type/classe file.

<< Hide | Show >>