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

Téléchargement

A titre d'exemple, nous utiliserons un fichier gtf. Ce fichier qui contient les coordonnées des exons de 5000 transcrits dans le génome humain peut être téléchargé ici: hg38_5k.gtf

Format

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.
1       ensembl exon    182393  182746  .       +       .       gene_id "ENSG00000279928"; transcript_id "ENST00000624431";
1       ensembl exon    183114  183240  .       +       .       gene_id "ENSG00000279928"; transcript_id "ENST00000624431";
1       ensembl exon    183922  184158  .       +       .       gene_id "ENSG00000279928"; transcript_id "ENST00000624431";
1       ensembl exon    195263  195411  .       -       .       gene_id "ENSG00000279457"; transcript_id "ENST00000623083";
1       ensembl exon    925741  925800  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000616016";
1       ensembl exon    925741  925800  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000618181";
1       ensembl exon    925741  925800  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000618323";
1       ensembl exon    925741  925800  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000620200";
1       ensembl exon    925922  926013  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000616016";
1       ensembl exon    925922  926013  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000618181";
1       ensembl exon    925922  926013  .       +       .       gene_id "ENSG00000187634"; transcript_id "ENST00000618323";

Solutions

On présente ci-dessous trois solutions en basant notre approche sur une boucle for (2 solutions) ou sur une boucle while (une solution). Les deux solutions sont présentées ci-dessous. Le fichier à lire est toujours refGene_hg38.txt (cf exercice précédent).

Avec une boucle for

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).

In [2]:
# -*- coding: utf-8 -*-
# La ligne précédente permet d'utiliser des caractères accentués
# dans les commentaires

# Pensez à adapter le chemin vers le fichier.
# Ici, il est dans le dossier data présent dans le
# répertoire supérieur 
file_handler = open("../data/hg38_5k.gtf", "r")

# On définit une variable line_number
# qui contiendra le numéro de la ligne courante
line_number = 0

# On utilise une boucle for pour 
# lire des lignes renvoyées par l'objet
# file_handler
for line in file_handler:
        
        # On incrémente la variable line_number
        # On est maintenant à la ligne 'line_number'
        line_number = line_number + 1
        
        # On test si l'expression suivante (line_number <= 10)
        # est vrai (i.e si elle est vérifiée).
        if line_number <= 10:
                # Si la condition est vrai on retire le caractère 
                # "\n" à droite. En effet, print produira lui même un 
                # caractère "\n".
                line = line.rstrip("\n")
                print(line)
1	havana	exon	365389	365692	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001656291"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	havana	exon	366019	366120	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001720138"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	ensembl	exon	975205	976269	.	-	.	transcript_version "3"; exon_number "3"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00002263633"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "2"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	976499	976624	.	-	.	transcript_version "3"; exon_number "2"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00001389758"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	978881	981029	.	-	.	transcript_version "3"; exon_number "1"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00003728856"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	havana	exon	1242449	1242646	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001853874"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1242835	1243158	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001951859"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1312787	1312949	.	-	.	transcript_version "5"; exon_number "7"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003654424"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313035	1313124	.	-	.	transcript_version "5"; exon_number "6"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003616764"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313509	1313592	.	-	.	transcript_version "5"; exon_number "5"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003594177"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
Le temps d'execution est ici de **0.184 secondes**. Vous pouvez le tester sur votre machine en utilisant la ligne commande suivante dans le terminal:
$ time python head.py

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.

In [3]:
# -*- coding: utf-8 -*-
# La ligne précédente permet d'utiliser des caractères accentués
# dans les commentaires

import sys # on importe le module sys

# Pensez à adapter le chemin vers le fichier.
# Ici, il est dans le dossier data présent dans le
# répertoire supérieur 
file_handler = open("../data/hg38_5k.gtf", "r")

# On définit une variable line_number
# qui contiendra le numéro de la ligne courante
line_number = 0

# On utilise une boucle for pour 
# lire des lignes renvoyées par l'objet
# file_handler
for line in file_handler:
        
        # On incrémente la variable line_number
        # On est maintenant à la ligne 'line_number'
        line_number = line_number + 1
        
        # On test si l'expression suivante (line_number <= 10)
        # est vrai (i.e si elle est vérifiée).
        if line_number <= 10:
                # Si la condition est vrai on retire le caractère 
                # "\n" à droite. En effet, print produira lui même un 
                # caractère "\n".
                line = line.rstrip("\n")
                print(line)
        else:
            # Si on est au delà de la ligne 10
            # on quitte le programme (on ne lit
            # pas les lignes suivantes)
            sys.exit()
1	havana	exon	365389	365692	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001656291"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	havana	exon	366019	366120	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001720138"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	ensembl	exon	975205	976269	.	-	.	transcript_version "3"; exon_number "3"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00002263633"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "2"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	976499	976624	.	-	.	transcript_version "3"; exon_number "2"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00001389758"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	978881	981029	.	-	.	transcript_version "3"; exon_number "1"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00003728856"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	havana	exon	1242449	1242646	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001853874"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1242835	1243158	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001951859"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1312787	1312949	.	-	.	transcript_version "5"; exon_number "7"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003654424"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313035	1313124	.	-	.	transcript_version "5"; exon_number "6"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003616764"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313509	1313592	.	-	.	transcript_version "5"; exon_number "5"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003594177"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
An exception has occurred, use %tb to see the full traceback.

SystemExit
To exit: use 'exit', 'quit', or Ctrl-D.

Le temps d'exécution est ici de 0.022 secondes soit un gain de 0.162 secondes.

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.

In [1]:
# -*- coding: utf-8 -*-
# La ligne précédente permet d'utiliser des caractères accentués
# dans les commentaires

# Pensez à adapter le chemin vers le fichier.
# Ici, il est dans le dossier data présent dans le
# répertoire supérieur 
file_handler = open("../data/hg38_5k.gtf", "r")

# On définit une variable line_number
# qui contiendra le numéro de la ligne courante
line_number = 0

# On utilise une boucle for pour 
# lire des lignes renvoyées par l'objet
# file_handler
for line in file_handler:
        
        # On incrémente la variable line_number
        # On est maintenant à la ligne 'line_number'
        line_number = line_number + 1
        
        # On test si l'expression suivante (line_number <= 10)
        # est vrai (i.e si elle est vérifiée).
        if line_number <= 10:
                # Si la condition est vrai on retire le caractère 
                # "\n" à droite. En effet, print produira lui même un 
                # caractère "\n".
                line = line.rstrip("\n")
                print(line)
        else:
            # Si on est au delà de la ligne 10
            # on quitte la boucle
            break
1	havana	exon	365389	365692	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001656291"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	havana	exon	366019	366120	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001720138"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	ensembl	exon	975205	976269	.	-	.	transcript_version "3"; exon_number "3"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00002263633"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "2"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	976499	976624	.	-	.	transcript_version "3"; exon_number "2"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00001389758"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	978881	981029	.	-	.	transcript_version "3"; exon_number "1"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00003728856"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	havana	exon	1242449	1242646	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001853874"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1242835	1243158	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001951859"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1312787	1312949	.	-	.	transcript_version "5"; exon_number "7"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003654424"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313035	1313124	.	-	.	transcript_version "5"; exon_number "6"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003616764"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313509	1313592	.	-	.	transcript_version "5"; exon_number "5"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003594177"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";

Solution 4 (boucle while)

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 élégant. A noter l'utilisation de la méthode readline() disponible pour les objets de type/classe file.

In [4]:
# -*- coding: utf-8 -*-
# La ligne précédente permet d'utiliser des caractères accentués
# dans les commentaires

# Pensez à adapter le chemin vers le fichier.
# Ici, il est dans le dossier data présent dans le
# répertoire supérieur 
file_handler = open("../data/hg38_5k.gtf", "r")

# On définit une variable line_number
# qui contiendra le numéro de la ligne courante
line_number = 0

while  line_number < 10:

        # On lit une ligne du fichier avec 
        # la méthode readline()
        line =  file_handler.readline()
        # On retire le caractère 
        # "\n" à droite. En effet, print produira lui même un 
        # caractère "\n".        
        line = line.rstrip("\n")
        print(line)
        
        # On ajoute 1 à line_number
        # Sinon la condition 'line_number < 10'
        # sera toujours vérifiée
        line_number = line_number + 1
1	havana	exon	365389	365692	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001656291"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	havana	exon	366019	366120	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000156968"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "lincRNA"; gene_source "ensembl_havana"; gene_id "ENSG00000237094"; exon_id "ENSE00001720138"; gene_version "11"; transcript_id "ENST00000431321"; gene_biotype "lincRNA"; havana_transcript "OTTHUMT00000007989"; exon_version "1"; havana_transcript_version "1"; transcript_name "RP4-669L17.10-012"; havana_gene_version "6"; gene_name "RP4-669L17.10";
1	ensembl	exon	975205	976269	.	-	.	transcript_version "3"; exon_number "3"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00002263633"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "2"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	976499	976624	.	-	.	transcript_version "3"; exon_number "2"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00001389758"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	ensembl	exon	978881	981029	.	-	.	transcript_version "3"; exon_number "1"; havana_gene "OTTHUMG00000040757"; transcript_support_level "5"; transcript_source "ensembl"; transcript_biotype "protein_coding"; tag "basic"; gene_source "ensembl_havana"; gene_id "ENSG00000187642"; exon_id "ENSE00003728856"; ccds_id "CCDS76083"; gene_version "9"; transcript_id "ENST00000433179"; gene_biotype "protein_coding"; exon_version "1"; transcript_name "PERM1-201"; havana_gene_version "3"; gene_name "PERM1";
1	havana	exon	1242449	1242646	.	-	.	transcript_version "1"; exon_number "2"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001853874"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1242835	1243158	.	-	.	transcript_version "1"; exon_number "1"; havana_gene "OTTHUMG00000001412"; transcript_support_level "2"; transcript_source "havana"; transcript_biotype "retained_intron"; gene_source "ensembl_havana"; gene_id "ENSG00000184163"; exon_id "ENSE00001951859"; gene_version "3"; transcript_id "ENST00000478606"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000005166"; exon_version "1"; havana_transcript_version "1"; transcript_name "FAM132A-005"; havana_gene_version "6"; gene_name "FAM132A";
1	havana	exon	1312787	1312949	.	-	.	transcript_version "5"; exon_number "7"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003654424"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313035	1313124	.	-	.	transcript_version "5"; exon_number "6"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003616764"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";
1	havana	exon	1313509	1313592	.	-	.	transcript_version "5"; exon_number "5"; havana_gene "OTTHUMG00000003330"; transcript_support_level "5 (assigned to previous version 4)"; transcript_source "havana"; transcript_biotype "nonsense_mediated_decay"; tag "mRNA_start_NF"; gene_source "ensembl_havana"; gene_id "ENSG00000127054"; exon_id "ENSE00003594177"; gene_version "18"; transcript_id "ENST00000531377"; gene_biotype "protein_coding"; havana_transcript "OTTHUMT00000383033"; exon_version "1"; havana_transcript_version "1"; transcript_name "CPSF3L-042"; havana_gene_version "12"; gene_name "CPSF3L";

Le temps d'exécution est là aussi de **0.022 secondes.