13 de mayo de 2015

Curso de Python para biólogos - Lección 7. Lectura y escritura de archivos

Con Python podemos leer, crear y modificar archivos de texto. Por ejemplo podemos leer un fichero con miles/millones de secuencias de DNA y extraer información del mismo, lo cual sería muy complicado de forma manual. Se verá un ejemplo al final de la lección.

Trabajando con directorios

Antes de empezar a crear y leer archivos, vamos a consultar el directorio de trabajo por defecto de Python con el comando 'os.getcwd', crear un nuevo directorio para trabajar en esta lección con 'os.makedirs' y cambiar el directorio de trabajo por este nuevo directorio ('os.chdir'). Para realizar todo ello primero tenemos que importar el módulo 'import os' (Operating System) que nos proporcionará los métodos mencionados. Un módulo es una extensión de Python y se debe importar para poder trabajar con sus herramientas.

Creación de archivos

Una vez que estamos en el directorio de trabajo deseado, vamos a crear un archivo llamado 'example.txt', para ello usaremos la función 'open' con la opción 'w' que indica escritura (write). El nuevo archivo será un objeto guardado en la variable 'f' y con el método 'write' podremos insertar un texto en el mismo. No debemos olvidar cerrar siempre el archivo después de leer o modificar sus contenidos con el método 'close'. Si abrimos el archivo con nuestro explorador de archivos, veremos el texto que contiene.

Usando un bucle 'for' podemos insertar automáticamente múltiples líneas de texto:

Lectura de archivos

Para leer un archivo, primero debemos abrirlo con la función 'open' y la opción 'r' que indica lectura (read). El método 'read' leerá todo el archivo de una vez si no se especifica ningún argumento. Importante, después de leerlo debemos cerrarlo con la función close.

Una  forma más adecuada de leer un fichero puede ser línea a línea con un bucle 'for', cada línea será almacenada en la variable 'line' en cada iteración.

Existen varias formas alternativas de leer los ficheros, entre ellas los métodos 'read' y 'readline', ambos aceptan especificar el número de caracteres que serán leídos. En próximas lecturas, Python continuará en la posición que terminó la anterior.

Ejercicio. Contar el número de genes codificantes que tiene el genoma de Escherichia coli

Para ello, primero descargaremos el fichero del proteoma de E. coli del siguiente enlace. Después, copiaremos el fichero descargado a nuestro directorio de trabajo. Y por último escribiremos un código en Python que cuente el número de veces que aparece el símbolo '>' al comienzo de una línea, dicho símbolo indica el comienzo de una proteína.

Si hemos hecho todo bien, el número de genes debería ser '4140', o similar (las nuevas versiones del genoma pueden variar ligeramente dicho número). Podemos confirmarlo en la web de KEGG.

Próxima lección

 En la próxima lección se hará una introducción a las expresiones regulares.

Curso de Python para biólogos - Lección 6. Bucles 'for'

En la lección de hoy presentaremos los bucles 'for', muy similares a los 'while' explicados en la lección 4, pero con un código más sencillo.

Bucles 'for':

Un bucle 'for', al igual que 'while', repite la ejecución de un bloque de código un número determinado de veces. Si invocamos el bucle 'for' con un nombre de variable más 'in' y una lista, el número de repeticiones vendrá determinado por el número de elementos de la lista, que serán pasados de uno en uno a la variable durante cada iteración. Veamos algunos ejemplos:

Con la función 'range' podemos especificar un listado de números que serán pasados a la variable especificada en el bucle. El primer parámetro de la función será el número inicial en el bucle, el segundo parámetro indicará el último número y el tercer parámetro proporcina el incremento a aplicar en cada iteración, por defecto el incremento es 1.

Como ya se ha comentado 'for' es una simplificación de 'while' cuando se trabaja con listas o números. El mismo código con 'while' es posible, pero será más largo y complejo.

Veamos como podemos usar 2 bucles 'for' anidados para recorrer los elementos de una matriz:

Sentencias de control de bucles: 'break', 'continue' y 'pass'

A veces nos interesará salir de un bucle (ya sea 'while' o 'for') antes de terminar todas las iteraciones, la forma de conseguirlo es mediante las sentencias de control 'break' y 'continue'. 'Break' terminará totalmente el bucle y continuará la ejecución del código del resto de programa. 'Continue' terminará la ejecución de una iteración y pasará directamente a la siguiente iteración del bucle, sin salir del bucle. 'Pass' no hace nada, es simplemente una sentencia que puede ser usada cuando no se requiere ejecutar ninguna acción pero es requerido escribir algo.

Bucles 'for' y diccionarios:

Los bucles 'for' también pueden ser útiles para procesar una a una las claves de un diccionario, sus valores o ambas cosas a la vez.


Ejercicios: 

Volvamos a los ejercicios propuestos en la lección anterior y resueltos con bucles 'while', veamos cómo pueden resolverse de una forma más sencilla mediante bucles 'for'.



Próxima lección

En la próxima lección se explicará como leer y escribir archivos con Python.