Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire un fichier FASTA

Après cette leçon: Je peux lire un fichier FASTA et en tirer le nom et la séquence de chaque enregistrement.

Leçon de 55 min3 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Comment lire un fichier FASTA en Python ?

Un fichier FASTA est un fichier texte qui range une ou plusieurs séquences, chacune précédée d’une ligne de nom. C’est le format le plus simple pour échanger des séquences.

Savoir le lire, c’est pouvoir charger n’importe quelle série de séquences dans un programme. Vous allez découper le texte ligne par ligne et recoller les séquences coupées.

À la fin de cette leçon

Remarque

Je peux lire un fichier FASTA et en tirer le nom et la séquence de chaque enregistrement.

Mots clés

MotCe que ça veut direExemple
FASTAun format de fichier texte pour des séquences
En-têtela ligne de nom, qui commence par le signe >>s1 premiere
Enregistrementun en-tête et les lignes de bases qui le suivent
Ligne repliéeune séquence coupée en plusieurs lignes courtes
Dictionnaireune table qui associe un nom à une valeur

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un enregistrement FASTA a un en-tête

Chaque enregistrement commence par une ligne qui débute par >. C’est l’en-tête : son premier mot est le nom de la séquence. Le reste est un commentaire libre.

Les lignes suivantes contiennent les bases. Un nouveau > ouvre l’enregistrement suivant.

Exemple travaillé : un fichier de deux enregistrements

Ligne du fichierCe que c’estCe qu’on en tire
>s1 premiereen-têtenom s1
ATGGCGbasesdébut de s1
CTAAGCbasessuite de s1 : 12 bases en tout
>s2 secondeen-têtenom s2
TTGACCbasess2 : 6 bases

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une séquence repliée se recolle ligne après ligne

Les fichiers coupent souvent les longues séquences en lignes courtes, par exemple de 60 bases. Une ligne n’est donc pas toujours une séquence entière.

Pour lire un fichier, on parcourt les lignes. Une ligne qui commence par > ouvre un enregistrement. Toute autre ligne non vide est collée à la séquence en cours.

Lire un texte FASTA avec une boucle

Code: python
texte = ">s1 premiere\nATGGCG\nCTAAGC\n>s2 seconde\nTTGACC\n"

sequences = {}
nom = ""
for ligne in texte.split("\n"):
    if ligne.startswith(">"):
        # L'en-tête : le nom est son premier mot, sans le signe >.
        nom = ligne[1:].split()[0]
        sequences[nom] = ""
    elif ligne != "":
        # Une ligne de bases : on la colle à la séquence en cours.
        sequences[nom] = sequences[nom] + ligne

print(sequences["s1"])
print(len(sequences["s1"]), len(sequences["s2"]))
# Ajoutez un troisième enregistrement dans le texte puis relancez.

Une erreur fréquente

Attention

Beaucoup croient qu’une ligne du fichier est une séquence. Si la séquence est repliée, chaque ligne n’en est qu’un morceau. Collez les lignes jusqu’au prochain en-tête avant de compter quoi que ce soit.

Dans le labo, un petit fichier FASTA

La commande suivante écrit dans le dossier de travail du labo un petit fichier exemple.fa, avec les deux enregistrements du tableau. Elle n’affiche rien.

Vous pouvez ensuite compter les en-têtes avec grep, puis lire chaque enregistrement avec Python. Les séquences sont inventées.

Écrire le fichier exemple.fa

Commande
docker exec jupyter sh -c "printf '>s1 premiere\nATGGCG\nCTAAGC\n>s2 seconde\nTTGACC\n' > exemple.fa"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compter les en-têtes du fichier

Commande
docker exec jupyter grep -c '>' exemple.fa

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire les noms et les longueurs

Commande
docker exec jupyter python3 -c "print([(b.split('\n')[0].split()[0], len(''.join(b.split('\n')[1:]))) for b in open('exemple.fa').read().split('>')[1:]])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Dans votre carnet, écrivez à la main un fichier FASTA de trois enregistrements dont une séquence repliée sur trois lignes. Lisez-le avec votre boucle.

Écrivez ensuite une ligne de code qui affiche le nom de chaque enregistrement et son taux de GC.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.