#3 Curso Python: Lectura y Escritura de Ficheros
hace 3 años · Actualizado hace 2 años
Bienvenidos a la tercera parte del curso de Python gratuito. En esta ocasión vamos a hablar sobre la lectura y escritura de ficheros en Python. En esta parte del curso de Python aprenderás a leer archivos en Python, así como escribir datos en el mismo fichero de lectura o en otros.
En los ejemplos que pondremos a lo largo de esta parte del curso, utilizaremos archivos de texto, ya sea en formato txt, como CSV, ya que estos dos son los más usuales. Sin embargo, en la práctica, lo que aprendas aquí te servirá para cualquier tipo de fichero.
¡Vamos a ello!
Entrar al curso completo de Python desde cero a experto
Introducción a la lectura y escritura de ficheros en Python
La lectura y escritura de ficheros hace referencia al hecho de abrir un fichero y acceder a su información, ya sea para ver el contenido existente en el fichero (lectura) o para añadir o crear nuevo contenido (escritura).
Es una práctica muy utilizada en el mundo de la programación, así que conviene aprender a utilizarla correctamente. Es un proceso sencillo de entender.
Ahora bien, ¿cómo manejamos la lectura y escritura de ficheros? Cada lenguaje de programación suele tener sus funciones concretas asociadas a esta tarea. A nivel teórico, la idea es abrir el archivo donde queramos realizar la lectura o escritura de ficheros, asignando los permisos concretos que necesita esa tarea. Si queremos leer un archivo, lo abriremos en modo lectura; mientras que si lo que queremos es escribir en un archivo, lo abriremos en modo edición o escritura.
Vamos a ver como funciona de forma práctica la lectura y escritura de ficheros en Python, con ejemplos, para comprender mejor este proceso.
Lectura de ficheros en Python
Para realizar la lectura de ficheros en Python, utilizamos la función open() que viene incluida en la librería básica de Python, por tanto no es necesario instalar ni importar ninguna librería.
Los parámetros de la función son: en primer lugar, la ruta del fichero que queremos leer; en segundo lugar, el modo de lectura. Los modos de lectura que podemos asignar en Python son los siguientes:
- 'r': para leer el fichero (read).
- 'r+': si quieres hacer lectura y escritura de datos.
- 'w': para abrir el fichero en modo escritura (write) y borrar todo lo que hubiera antes en el fichero, en caso de existir.
- 'a': si lo que quieres es escribir en el fichero, a continuación del contenido existente en el mismo (append).
Con la función open y estos parámetros, se devuelve un objeto "fichero" donde está la información del documento que hemos abierto. Para acceder a su contenido, debemos utilizar las funciones readline() y readlines().
Con la función readline() se lee una línea del fichero abierto. Cada vez que se ejecuta esta función lo que ocurre es que lee una línea del fichero, la devuelve y pasa a la siguiente. Por tanto, cada vez que se utiliza sobre el mismo fichero, va devolviendo las diferentes líneas consecutivas.
Por otro lado, la función readlines() lee todas las líneas y las almacena en una lista de Strings. Normalmente esta función se utiliza en un bucle for directamente para iterar sobre el contenido del fichero.
Hay que tener en cuenta que algunos elementos como tabulador o salto de línea se representan como \tab y \n respectivamente en la gran mayoría de sistemas operativos. Por ello, debemos formatear en muchos casos esta información.
A continuación vamos a ver un ejemplo sencillo de lectura de ficheros para afianzar los conceptos enumerados.
Ejemplo de lectura de ficheros en Python
Para nuestro ejemplo de lectura de ficheros en Python, supongamos la siguiente situación para nuestro ejemplo: tenemos un sistema informático en un bar-restaurante. El camarero apunta los pedidos en una aplicación que guarda la información por mesas en un fichero.
Este fichero tiene el formato:
Mesa X
Pedido de la mesa
Necesitamos una segunda parte del sistema informático que lea los datos de este fichero y asigne a los camareros y cocineros su trabajo. En este ejemplo, vamos a ver como se implementa la lectura de los pedidos de la mesa y almacenamiento de la información en Python.
La idea es guardar internamente el pedido asociado a cada mesa, para que en otras partes de este programa se pueda implementar el envío de estos pedidos al camarero X o al cocinero Y.
Vamos a empezar con el ejemplo de fichero que podemos ver a continuación:
Con estos datos, primero debemos pensar como queremos formatearlo en nuestro programa para hacer la lectura de ficheros. Hay muchas maneras de hacerlo, pero en este caso vamos a implementarlo como un diccionario que almacene los datos de la siguiente manera:
{1: ["Tortilla", "Croquetas", "Agua"],
2: ["Patatas fritas", "Tabla de Ibéricos", "Vino Tinto"],
3: ["Callos", "Tortilla", "Cerveza"],
4: ["Pepito de Ternera", "Calamares", "Ensalada", "Agua"]}
Es decir, un diccionario donde la clave es el número de la mesa y el valor es una lista con los elementos que se han pedido en dicha mesa. Parece más complicado de lo que es, así que vamos parte por parte.
Primero, vamos a leer los datos del documento:
A continuación, extraemos la información de la variable fichero. En este caso, vamos a utilizar la función readlines():
Ahora vamos a formatear las líneas. Primero, eliminamos los saltos de línea (\n) que no nos hacen falta, y están presentes al final de cada línea. Esto lo hacemos con la función replace(), que cambia el primer argumento por el segundo en todas las ocurrencias del string:
Posteriormente, comprobamos si existe la palabra "Mesa" en esa línea. Si es así, nos interesa quedarnos con el número de la mesa. Como la estructura es "Mesa número" hacemos una separación del string utilizando como separador el espacio.
De esta manera obtenemos una lista de elementos, que representa los diferentes sub-strings que hay al separar el string original por sus espacios. En este caso, tendríamos la estructura ["Mesa", "número"].
Para evitar errores, primero inicializamos el valor numero_mesa en -1, y le damos el valor correspondiente en cada iteración.
Después, queremos conseguir la información del pedido. Como el pedido y la mesa nunca están en la misma línea, vamos a realizar la comprobación en la parte ELSE del IF. Para asegurarnos de que estamos en la línea en la que se guarda la información del pedido, vamos a comprobar que la línea no está vacía. Después, separamos la cadena por los diferentes elementos del pedido. En este caso tenemos dos separadores: ", " y " y ". Para que sea más cómodo, vamos a unificarlos (línea 20) para que todos sean ", ". Finalmente, podemos separar por ", " el string y conseguir la lista de elementos ya separados:
Con la entrada que tenemos y este programa, si hacemos en cada iteración del bucle un print(numero_mesa, pedido) obtenemos la siguiente salida:
Ya nos queda muy poco, solamente tenemos que guardar estos elementos en un diccionario una vez conseguimos los elementos del pedido:
Para hacer una comprobación final de que todo es correcto, vamos a mostrar por pantalla lo que hay dentro del diccionario:
Es muy importante recordar que es necesario cerrar el fichero usando fichero.close() para que se guarden los cambios correctamente y se libere la memoria del programa.
Con esto termina el ejemplo de lectura de ficheros en Python. A continuación, vamos a ver como se aplica la escritura de archivos en Python y otro ejemplo.
Escritura de ficheros en Python
Tal y como comenté en el apartado anterior, Python utiliza la misma función para leer y para escribir datos en un fichero. La mayor diferencia es que hay que especificar en qué modo abrimos el fichero. En el caso de escritura de datos, tenemos las opciones anteriormente mencionadas: 'r+', 'w' y 'a'.
Cuando queremos escribir en un fichero únicamente debemos abrirlo y utilizar la función write() sobre el fichero abierto. Un aspecto a tener en cuenta es que si queremos que los datos que almacenamos en nuestros archivos contengan saltos de línea o tabuladores, es necesario introducirlos explícitamente con \n y \t.
Vamos a ver un ejemplo para que quede claro como se utiliza estas funciones. Para ello, vamos a crear un programita que contenga una función que escriba en un fichero los pedidos de una mesa concreta, utilizando el mismo formato que vimos en el ejemplo del punto anterior.
Ejemplo de escritura de ficheros con Python
Para llevar a cabo este ejemplo, primero vamos a crear una función que escriba en un fichero que se pasa por parámetro, la mesa y el pedido que tiene dicha mesa. Como queremos que tenga la misma estructura que en el ejemplo anterior, vamos a tener que hacer algún ajuste de formato de datos, vamos viendo el código. Primero escribimos la mesa y ponemos un salto de línea:
Después, vamos a escribir el pedido de la mesa. Aquí tenemos que hacer alguna pequeña comprobación, para saber cuando poner ", " entre los elementos y cuando poner " y ". Para ello, vamos a iterar el array de pedidos de una forma un poco diferente. Vamos a utilizar el bucle for en un rango, concretamente en el rango del tamaño del array de pedidos. Es decir, en cada iteración del bucle, en lugar de acceder al dato del array, accederemos a un número que hace referencia a su posición.
De esta manera, cuando queramos acceder al elemento en sí, haremos: pedidos[posición]. Para solucionar el problema de los separadores ", " y " y ", lo que debemos hacer es comprobar en qué posición estamos. Si el próximo elemento a escribir es el último, debemos poner " y ", en caso contrario, ", ".
Una vez escribimos el pedido completo, debemos hacer DOS saltos de línea. El primero, para pasar a la siguiente línea y el segundo para dejar una línea en blanco entre las mesas.
Ahora debemos llamar a esta función para que escriba en un fichero los datos de las mesas. Para ello, vamos a crear un diccionario con la información en el formato que explicamos en el ejemplo anterior:
Además, debemos abrir el archivo en el que queramos hacer la escritura de ficheros. Este archivo puede existir o no. Si existe, al abrirlo en modo escritura, se va a sobreescribir su información; si no existe, lo crea en el directorio actual.
Por último, vamos a llamar a la función que hemos declarado, para cada uno de las mesas.
Finalmente, debemos cerrar el fichero:
Si abrimos el fichero salida_datos.txt podemos ver la siguiente información, que coincide exactamente con el formato que queríamos mantener:
Y con esto llegamos al final de esta parte del curso de python sobre lectura y escritura de ficheros.
Espero que hayas aprendido en esta tercera parte del curso de python para principiantes, donde hemos visto la lectura y escritura de ficheros. Si es así deja un comentario!! Si crees que me he olvidado de algo importante, también puedes ponérmelo en un comentario 🙂
Este curso se mantiene actualizado y siempre que puedo le añado nuevo contenido, así que no dudes en pasarte de vez en cuando a ver si hay novedades.
Si quieres ver el resto de entradas del curso de Python, ve a la página del curso de programación en Python.
¡Nos vemos en la siguiente parte del curso de Python!
Deja una respuesta
Otras Entradas Relacionadas