Tema 10: Manejo de archivos

Compartir en:
Haz clic aquí para ver la videoclase

Contenidos

Archivos

Los archivos que manejamos en un sistema operativo pueden ser de dos tipos:

  • Binarios: Contienen información compilada. Esto quiere decir que está traducida al lenguaje del ordenador para que este lo interprete directamente. Por este motivo, si los abrimos en un editor de texto, no son legibles.

  • Texto: Contienen información en formato de texto. No están compilados y, por lo tanto, son legibles al ser humano. Si el texto que contienen es código de programación, necesitan un intéreprete de código. Los intérpretes de código son programas que traducen texto legible a formato binario para que el ordenador pueda interpretarlo. Python es un intérprete de código, puesto que traduce un lenguaje (el suyo propio) al lenguaje del ordenador. De esta manera es como, con códigos de Python, hacemos que el ordenador realice una serie de procesos.


Python nos permite comunicarnos con el sistema operativo para realizar distintas tareas. Una de ellas es manejar archivos.

Abrir y cerrar archivos

Para abrir un archivo en Python se utiliza la función open(), que toma como argumento principal la ruta del archivo que queremos abrir y devuelve un manejador de archivo. Esto quiere decir que no devuelve el texto del archivo directamente.


Añade el siguiente archivo a la memoria del cuaderno para ejecutar el siguiente bloque de código: https://www.py4e.com/code3/mbox-short.txt

1manejador = open('mbox-short[1].txt') # cambia el nombre del archivo si no llama así
2
3print(manejador)
<_io.TextIOWrapper name='mbox-short[1].txt' mode='r' encoding='UTF-8'>


Como ves, si imprimimos el valor de retorno de la función open(), no obtenemos texto. Para acceder al texto de un archivo debemos iterarlo. Leamos las 10 primeras líneas:

 1manejador = open('mbox-short[1].txt') # cambia el nombre del archivo si no llama así
 2
 3count = 0
 4
 5for linea in manejador:
 6
 7  if count < 10:
 8
 9    print(linea)
10
11    count += 1
12
13  else: break
From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008

Return-Path: <postmaster@collab.sakaiproject.org>

Received: from murder (mail.umich.edu [141.211.14.90])

     by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA;

     Sat, 05 Jan 2008 09:14:16 -0500

X-Sieve: CMU Sieve 2.3

Received: from murder ([unix socket])

     by mail.umich.edu (Cyrus v2.2.12) with LMTPA;

     Sat, 05 Jan 2008 09:14:16 -0500

Received: from holes.mr.itd.umich.edu (holes.mr.itd.umich.edu [141.211.14.79])


Cuando se ejecuta durante el flujo de nuestro código, el archivo que abramos estará en el mismo estado que cuando lo abrimos en cualquier otra aplicación. Por este motivo es muy importante asegurarnos de cerrar los archivos cuando ya no los necesitemos, ya que, si ya la ejecución de nuestro código es muy larga y no cerramos los archivos que utilizamos, estaremos consumiendo recursos innecesarios.


Para cerrar un archivo se utiliza el método close().

 1manejador = open('mbox-short[1].txt') # cambia el nombre del archivo si no llama así
 2
 3count = 0
 4
 5for linea in manejador:
 6
 7  if count < 5:
 8
 9    print(linea)
10
11    count += 1
12
13  else: break
From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008

Return-Path: <postmaster@collab.sakaiproject.org>

Received: from murder (mail.umich.edu [141.211.14.90])

     by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA;

     Sat, 05 Jan 2008 09:14:16 -0500


De esa manera, abrimos el archivo, obtenemos la información que necesitemos de él y, al final, lo cerramos. Una vez se ejecuta la sentencia close() el archivo deja de ser utilizado por el sistema.


Escribir archivos

Para escribir un archivo debemos utilizar la función open() en el modo w. En este modo, pueden ocurrir dos cosas con el archivo que indiquemos como primer argumento: si existe, se sobrescribirá con el contenido que indiquemos; si no existe, se creará un nuevo archivo. A menos que estemos seguros de querer sobrescribir el archivo existente y perder todo su contenido, es aconsejable asegurarnos de que el nombre de archivo que indiquemos no exista. Una vez abierto el archivo, debemos utilizar el método write() para escribir cadenas de texto.


Si recuerdas las líneas que hemos visto del archivo mbox.txt, se presentan correos electrónicos precedidos de la palabra From. Vamos a guardar en un documento de texto aparte esa información.

 1manejador_lectura = open('mbox-short[1].txt')
 2
 3manejador_escritura = open('/content/correos.txt', 'w') # la carpeta en la que estamos trabajando es /content/
 4
 5for linea in manejador_lectura:
 6
 7  if linea.startswith('From'):
 8
 9    manejador_escritura.write(linea)
10
11manejador_lectura.close()
12
13manejador_escritura.close()