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.
# A faire plus tard
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.
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";
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éé.
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.
fileContent = file_handler.readline()
fileContent = file_handler.readlines()
fileContent = file_handler.read()
fileContent = file_handler.read(6)