Objectif

On se propose de re-implémenter la commande cut (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
  • Couper ("splitter") chacune des lignes en fonction du séparateur (ici une tabulation, "").
  • Récuperer la colonne d'intérêt en indexant la liste.
  • Imprimer la colonne recherchée.
In []:
# A faire plus tard

Données

Téléchargement

Commencez par télécharger le sujet au format ipython notebook TD02_NT.ipynb. Après u clic-droit sur ce lien, enregistrez-le dans un dossier particulier (TD2_python par exemple). Puis ouvrez un terminal de commande et lancez le "ipython3 notebook" et enfin chargez le fichier du TD.

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, doit être téléchargé ici: hg38_5k.gtf et enregistré dans votre dossier Téléchargements.

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";

L'objet file

Fonction open

Avant de pouvoir lire (ou écrire) dans un fichier, vous devez créer l'objet Python qui servira de lien avec le fichier résidant sur votre machine. Pour cela, on utilise la fonction Python open, qui prend en arguments la localisation (relative ou absolue) du fichier ainsi que le mode d'ouverture. Une fois que créé l'objet fichier, vous pourrez appeler ses méthodes pour lire (ou écrire). Finalement, la fonction close permet de terminer la connexion avec le fichier. ### Modes d'ouverture ### Operateur | Description --- | --- r | Ouvre un fichier en lecture uniquement. Le pointeur est placé au début du fichier. C'est la valeur par défault. w | Ouvre un fichier en écriture uniquement. Écrase le contenu du fichier s'il existe déjà, crée un nouveau fichier sinon. Le pointeur est placé au début du fichier. a | Ouvre un fichier en écriture uniquement. Le pointeur est placé à la fin du fichier s'il existe, sinon un nouveau fichier est créé.

Exercice

  1. Ouvrez le fichier hg38_5k.gtf en mode lecture dans un objet file_handler
  2. Quel est le type de l'objet file_handler?
  3. Quelle méthode permet de vérifier que le fichier est ouvert?
  4. Que se passe-t-il quand vous ouvrez en lecture un fichier qui n'existe pas encore?
In []:
 

Lire dans un fichier

Après avoir ouvert un fichier en mode lecture, plusieurs fonctions vous permettent d'en stocker le contenu. Testez les principales, listées ci-dessous. Puis répondez aux questions suivantes 1. Quel est l'effet d'appels succéssifs à la méthode read(int)? 3. Quelle méthode permet de replacer le curseur au début du fichier? 2. Afficher la troisième ligne du fichier, puis la deuxième avec la méthode readlines() puis recommencer avec la méthode readline(). 4. Retourner à l'objectif de départ du TD.

In []:
fileContent = file_handler.readline()
In []:
fileContent = file_handler.readlines()
In []:
fileContent = file_handler.read()
In []:
fileContent = file_handler.read(6)

Pour aller plus loin

Écrire dans un fichier

  1. Recherchez les deux fonctions permettant l'écriture dans un fichier.
  2. Ouvrez un nouveau fichier en écriture, puis testez l'écriture d'un entier sur une première ligne (par exemple la moyenne des positions start des transcrits) et pensez à fermer votre fichier.
  3. Réouvrez votre fichier, créez une liste et écrivez-la sur la dernière ligne (2ème), puis sur la première.
In []: