¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer un archivo FASTA

Después de esta lección: Puedo leer las secuencias de un texto en formato FASTA y guardarlas con su nombre.

Lección de 60 min4 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Qué es un archivo FASTA?

FASTA es un formato de texto sencillo para guardar una o varias secuencias, cada una con su nombre. Casi todas las herramientas de bioinformática lo leen, así que saber leerlo con Python es una destreza básica.

Un archivo FASTA es texto plano. Cualquier editor lo abre, y un programa corto lo separa en nombres y secuencias.

Al final de esta lección

Nota

Puedo leer las secuencias de un texto en formato FASTA y guardarlas con su nombre.

Palabras clave

PalabraQué significaEjemplo
FASTAun formato de texto con nombres y secuencias
Registroun nombre con su secuencia
Cabecerala línea que empieza por el signo > y da el nombre>sec1 muestra inventada
Línea partidauna secuencia larga repartida en varias líneas
Diccionariouna colección de pares: una clave y su valor

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un registro FASTA tiene cabecera y secuencia

Cada registro empieza con una cabecera: una línea que empieza por >. Después del signo viene el nombre, y puede seguir una descripción.

Las líneas siguientes son la secuencia. Un registro termina donde empieza la siguiente cabecera, o donde acaba el archivo.

Ejemplo resuelto: un archivo FASTA de dos registros

LíneaTextoQué es
1>sec1 muestra inventadaCabecera del primer registro
2ACGTACPrimera parte de la secuencia 1
3GGTTSegunda parte de la secuencia 1
4>sec2Cabecera del segundo registro
5TTGCASecuencia 2, en una sola línea

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Saca el nombre de una cabecera

Comando
docker exec jupyter python3 -c "t='>sec1 muestra inventada\nACGTAC\nGGTT\n'; print(t.split('\n')[0][1:].split()[0])"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El texto se separa en líneas con split

Un archivo se lee como un texto con saltos de línea. text.split("\n") lo parte en una lista de líneas.

Si el texto acaba con un salto de línea, la última pieza de la lista es una cadena vacía. Un programa que lee FASTA tiene que saltarse esas líneas vacías.

Mira las líneas de un texto FASTA

Comando
docker exec jupyter python3 -c "t='>sec1\nACGTAC\nGGTT\n>sec2\nTTGCA\n'; print(t.split('\n'))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuenta los registros por sus cabeceras

Comando
docker exec jupyter python3 -c "t='>sec1\nACGTAC\nGGTT\n>sec2\nTTGCA\n'; print(t.count('>'), len(t.split('\n')))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Se leen los registros línea a línea

El programa recorre las líneas y guarda en una variable el nombre del registro actual. Si la línea empieza por >, abre un registro nuevo con una secuencia vacía.

Si no, y la línea no está vacía, la pega al final de la secuencia actual. Así las líneas partidas se unen solas.

Lee un texto FASTA a un diccionario

Código: python
text = ">sec1 muestra inventada\nACGTAC\nGGTT\n>sec2\nTTGCA\n"
records = {}
name = ""
for line in text.split("\n"):
    if line.startswith(">"):
        name = line[1:].split()[0]  # el nombre es la primera palabra
        records[name] = ""
    elif line != "":
        records[name] = records[name] + line
for name in records:
    print(name, len(records[name]), records[name])
# Cambia el texto: añade una tercera secuencia inventada y ejecuta de nuevo.

Ejemplo resuelto: lo que guarda el diccionario

NombreLíneas del archivoSecuencia guardadaLongitud
sec1ACGTAC y GGTTACGTACGGTT10
sec2TTGCATTGCA5

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Calcula la longitud de cada registro

Comando
docker exec jupyter python3 -c "t='>sec1 muestra inventada\nACGTAC\nGGTT\n>sec2\nTTGCA\n'; print([(x.split('\n')[0].split()[0], len(''.join(x.split('\n')[1:]))) for x in t.split('>')[1:]])"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que cada línea del archivo es una secuencia entera. No siempre: una secuencia larga se reparte en varias líneas. La línea con el signo > es el nombre, no una secuencia. Las líneas de debajo se pegan hasta la siguiente cabecera.

Para ir más lejos: el registro más largo

Con el diccionario que devuelve tu función, busca el registro más largo. Escribe un bucle que recorra los nombres y guarde el mayor. ¿Qué haces si dos registros empatan? Decide una regla y escríbela en un comentario.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.