Tutorial de python – Parte 4 (Manejo de ficheros)

Manejo de ficheros

En esta nueva entrada veremos como manejar ficheros desde Python y persistir nuestros datos.

El tipo de operaciones que podemos realizar sobre un fichero son las siguientes:

  • Crear un fichero.
  • Leer un fichero.

Creando y leyendo nuestro primer fichero

Para manejar un fichero en Python usaremos el método open, ya que es el principal encargado de realizar estas operaciones.

El método open recibe varios parámetros, el primero indica el nombre del fichero y el segundo indica el modo para abrir el fichero.

A continuación algunos de los modos de apertura de un fichero mas usados:

  • r: Abre un fichero para su lectura. Es el valor predeterminado, el puntero del archivo se pone al principio y nos devuelve un error si el fichero no existe.
  • a: Modo añadir. Abre un fichero para añadir contenido posicionándose al final, en el caso de no existir el archivo lo crea.
  • w: Modo escritura. Abre un fichero para escribir contenido posicionándose al principio del fichero, en el caso de no existir el archivo lo crea.

Teniendo claro el método y los parámetros vamos a realizar un ejemplo

Empezaremos a leer un fichero que no existe y así comprobamos que ocurre.

Para leer un fichero primero debemos abrirlo (open), indicando su nombre y modo de apertura.

#!/usr/bin/env python
# importamos el módulo. En próximas entregas explicaremos su uso
import datetime

# Definimos una función. En al próxima entrada veremos que son las funciones
def file_manipulation(name, mode):
  try:
    file = open(name, mode)
    return file
  except OSError as err:
    print("Error: {0}".format(err))
  return

# Si ejecutamos el códgio varias veces, comprobaremos la diferencia entre write y append
fecha = str(datetime.datetime.now())

fileWrite = 'write.txt'
fileAppend = 'append.txt'
print ('-----------------------------------')
print ('Lectura de un archivo que NO existe')
file_manipulation('noExiste.txt', 'r')
print ('-----------------------------------')

Como hemos podido observar, al no existir el fichero nos devuelve un error indicando que no existe.

Ahora probaremos a leer un archivo que si existe, para ello crearemos antes un archivo y así comprobar como se realiza.

En el siguiente ejemplo usaremos estos dos métodos:

  • write(): Para escribir contenido en el fichero
  • read(): Para leer contenido de el fichero
#!/usr/bin/env python
# importamos el módulo. En próximas entregas explicaremos su uso
import datetime

# Definimos una función. En al próxima entrada veremos que son las funciones
def file_manipulation(name, mode):
  try:
    file = open(name, mode)
    return file
  except OSError as err:
    print("Error: {0}".format(err))
  return

# Si ejecutamos el códgio varias veces, comprobaremos la diferencia entre write y append
fecha = str(datetime.datetime.now())

fileWrite = 'write.txt'
fileAppend = 'append.txt'

print ('-----------------------------------')
print ('Escritura de un archivo (WRITE) - Puntero al principio del fichero y borra el contenido')
f = file_manipulation(fileWrite, 'w')
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
f.write(fecha)
f.close()
print ('Cerramos el fichero ' + f.name)
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
print ('-----------------------------------')
print ('-----------------------------------')
print ('Abrimos para leer el contenido')
print ('Lectura de un archivo que SI existe')
f = file_manipulation(fileWrite, 'r')
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
content = f.read();
print ('Contenido del fichero: ' + f.name)
print (content)
f.close()
print ('Cerramos el fichero: ' + f.name)
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
print ('-----------------------------------')

Este ejemplo es algo mas completo y podemos comprobar el uso de write() para escribir en el fichero y el uso de read() para leer el contenido.

El siguiente ejemplo hacemos uso del modo a, para añadir contenido.

Si ejecutásemos tanto el código anterior como el siguiente veríamos que en append el fichero incrementa, mientras que en write el fichero cada vez que se escribe se elimina todo.

#!/usr/bin/env python
# importamos el módulo. En próximas entregas explicaremos su uso
import datetime

# Definimos una función. En al próxima entrada veremos que son las funciones
def file_manipulation(name, mode):
  try:
    file = open(name, mode)
    return file
  except OSError as err:
    print("Error: {0}".format(err))
  return

# Si ejecutamos el códgio varias veces, comprobaremos la diferencia entre write y append
fecha = str(datetime.datetime.now())

fileWrite = 'write.txt'
fileAppend = 'append.txt'
print ('-----------------------------------')
print ('Escritura de un archivo (APPEND) - Puntero al final del fichero y añade el contenido')
f = file_manipulation(fileAppend, 'a')
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
f.write(fecha + '\n')
f.close()
print ('Cerramos el fichero ' + f.name)
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
print ('-----------------------------------')
print ('-----------------------------------')
print ('Abrimos para leer el contenido')
print ('Lectura de un archivo que SI existe')
f = file_manipulation(fileAppend, 'r')
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
content = f.read();
print ('Contenido del fichero: ' + f.name)
print (content)
f.close()
print ('Cerramos el fichero: ' + f.name)
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
print ('-----------------------------------')
print ('-----------------------------------')
print ('Abrimos un fichero y lo leemos linea a linea - (archivos grandes normalmente)')
f = file_manipulation(fileAppend, 'r')
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
lineF = f.readlines()
for line in lineF:
  print(line)
  
f.close()
print ('Cerramos el fichero: ' + f.name)
print ('Fichero ' + f.name +' esta cerrado: ' + str(f.closed))
print ('Fichero ' + f.name +' se abrio en modo: ' + f.mode)
print ('-----------------------------------')

Del código anterior, cabe mencionar la forma en la que hemos realizado la lectura del fichero, en vez de usar read que lee de golpe todo el fichero hemos usado readlines que lee linea a linea.

Esta forma de leer un fichero es la recomendada para ficheros con un gran volumen de datos.

Para finalizar este apartado, recordar siempre cerrar el fichero usando el método close.

Manipulando ficheros con Python

En este punto, nos hemos dado cuenta que sabemos como crear y leer un fichero pero…, ¿Como puedo eliminar un fichero, cambiar el nombre o crear una carpeta?

Bien, para estas acciones y otras Python no ofrece un módulo llamado os.

Este módulo nos proporciona ciertos métodos que nos ayudan a realizar operaciones de procesamiento de ficheros, como renombrar y eliminar.

A continuación algunos de los métodos que nos ofrece este módulo:

Método Acción Ejemplo
os.rename() Renombra un fichero
os.rename(‘write.txt’, ‘rename_write.txt’)
os.remove() Elimina un fichero
os.remove(‘rename_write.txt’)
os.mkdir() Crear un directorio os.mkdir(‘new_directory’)
os.chdir() Cambia de directorio os.chdir(‘/resources/images/’)

Para terminar esta entrada de Python, pulsado aquí podéis acceder a la documentación oficial del módulo.