Ficheros con Python

Los ficheros son una parte importantísima en el desarrollo de nuestras aplicaciones con Python. Podemos utilizarlos para guardar información y acceder a ella posteriormente, o acceder directamente a información almacenada en ficheros que hayan sido proporcionados por otras aplicaciones.

Ficheros en Python

Python nos provee de varias funciones para trabajar con ficheros de forma sencilla.

  • Read → Leer → ‘r’
  • Append → Añadir → ‘a’
  • Write → Escribir → ‘w’
  • Create → Crear → ‘x’

En todo momento podemos indicar a nuestro archivo si queremos que sea manejado en modo binario ‘b’ o en modo texto ‘t’.

¿Qué acción es común a cualquier operación que necesitemos realizar con nuestros ficheros? La acción de abrir el fichero.

Siempre que vayamos a trabajar con ficheros, sea para lo que sea, lo primero que necesitamos es abrirlo. Una vez que le decimos que abra un fichero, tenemos que especificarle la ruta donde está alojado en caso de que este sea un fichero existente, o la ruta en la que vamos a querer almacenarlo si no existe todavía. También debemos indicarle el modo con el que vamos a abrir el fichero (Read → ‘r’, Append → ‘a’, Write → ‘w’, Create → ‘x’).

De esta forma podríamos imprimir en pantalla el contenido del archivo de texto.

fichero = open('ruta_del_fichero.txt', 'r')
print(fichero.read())
fichero.close()

Leer fichero con Python

Vamos a crear un ejemplo de lectura real de un fichero:

Para ello, tenemos que crear dos archivos:

  • Archivo con extensión .txt que leeremos (llamaremos al archivo lorem.txt y será un archivo de texto con varias líneas de texto).
  • Archivo con extensión .py que será el que tenga nuestro programa escrito en Python.

Algo parecido a esto será nuestro archivo lorem.txt:

Lorem Ipsum es simplemente el texto de relleno de las imprentas.
Lorem Ipsum ha sido el texto de relleno estándar de las industrias.
No sólo sobrevivió 500 años.
Fue popularizado en los 60s con la creación de las hojas "Letraset".

Ahora vamos a escribir el programa para leer este archivo de texto desde Python y que muestre en pantalla el resultado.

Guardaremos en la variable fichero el objeto resultante de abrir el fichero lorem.txt en modo ‘rt’ → (read text). Después imprimiremos en pantalla la lectura completa del contenido de esa variable mediante print() y cerraremos el fichero con close().

Read() para ficheros

Al utilizar read() leemos el fichero completo.

fichero = open ('lorem.txt', 'rt')
print(fichero.read())
fichero.close()

# Lorem Ipsum es simplemente el texto de relleno de las imprentas.
# Lorem Ipsum ha sido el texto de relleno estándar de las industrias.
# No sólo sobrevivió 500 años.
# Fue popularizado en los 60s con la creación de las hojas "Letraset".

Si hubiéramos abierto el fichero con ‘rb’ → (read binary), obtendríamos este resultado:

fichero = open ('lorem.txt', 'rb')
print(fichero.read())
fichero.close()

# b'Lorem Ipsum es simplemente el texto de relleno de las imprentas.\n
# Lorem Ipsum ha sido el texto de relleno est\xc3\xa1ndar de las industrias.\n
# No s\xc3\xb3lo sobrevivi\xc3\xb3 500 a\xc3\xb1os.\n
# Fue popularizado en los 60s con la creaci\xc3\xb3n de las hojas "Letraset".'

Readlines() para ficheros

Si queremos tener acceso a las líneas de nuestro fichero, tendremos que utilizar readlines(). De esta forma, se almacenará cada línea como elemento de una lista.

fichero = open ('lorem.txt', 'r')
lineas = fichero.readlines()

print(type(lineas))
# <class 'list'>

print(lineas[0])
# Lorem Ipsum es simplemente el texto de relleno de las imprentas.

fichero.close()

Podríamos recorrer todas las líneas de nuestro fichero mediante la estructura for de Python de la misma forma que recorreríamos una lista de Python con elementos de otro tipo.

fichero = open ('lorem.txt', 'r')
lineas = fichero.readlines()

for linea in lineas:
    print(f'→ {linea}')

fichero.close()

# → Lorem Ipsum es simplemente el texto de relleno de las imprentas.
# → Lorem Ipsum ha sido el texto de relleno estándar de las industrias.
# → No sólo sobrevivió 500 años.
# → Fue popularizado en los 60s con la creación de las hojas "Letraset".

Crear fichero con Python

Para crear un fichero con Python, usaremos también open(), le indicaremos la ruta (nombre y extensión del archivo incluido) donde queremos que se guarde nuestro fichero y le indicaremos que queremos abrirlo en modo ‘w’ → (write).

Con estas líneas de código del ejemplo, crearemos un archivo vacío llamado archivo.txt. Debemos tener muy en cuenta que si existe un archivo con este nombre lo sustituirá por el que estamos creando vacío.

fichero = open('archivo.txt', 'w')
fichero.close()

↓ Se ha creado un archivo vacío

Escribir en fichero con Python

De la misma forma que teníamos para leer nuestro fichero, o de forma completa o línea a línea, para escribir en nuestro fichero disponemos de write() y de writelines().

Write() para ficheros

Vamos a escribir algunas líneas en el archivo llamado archivo.txt. que acabamos de crear.

fichero = open('archivo.txt', 'w')
fichero.write('Soy la primera línea')
fichero.close()

↓ Nuestro archivo contiene
# Soy la primera línea

Si quisiésemos guardar varias líneas en nuestro documento, podríamos indicárselo mediante ‘\n’ para crear cada salto de línea.

Vamos a escribir una segunda línea en archivo.txt.

fichero = open('archivo.txt', 'w')
fichero.write('Soy la primera línea\nSoy la segunda línea')
fichero.close()

↓ Nuestro archivo contiene
# Soy la primera línea
# Soy la segunda línea

Writelines() con ficheros

Con writelines() para Python podemos escribir el contenido de una secuencia en nuestro fichero. Dado que el salto de línea no se agrega de forma automática, tendremos que añadirlo nosotros.

Para este ejemplo vamos a utilizar una tupla de Python.

tupla = ('a', 'b', 'c', 'd')
fichero = open('archivo.txt', 'w')
fichero.writelines(tupla)
fichero.close()

↓ Nuestro archivo contiene
# abcd

Si agregamos el salto de línea al final de cada elemento de nuestra tupla, podemos ver que se guardará cada elemento en una nueva línea de nuestro fichero. Para hacer esto, recorreremos los elementos de la tupla e imprimiremos ‘\n’ al final de cada elemento.

tupla = ('a', 'b', 'c', 'd')
fichero = open('archivo.txt', 'w')
for letra in tupla:
    fichero.writelines(f'{letra}\n')
fichero.close()

↓ Nuestro archivo contiene
# a
# b
# c
# d

Append() con ficheros

Por ahora hemos creado y escrito en ficheros vacíos, pero ¿qué pasa si queremos añadir datos a un archivo ya existente escribiendo algunas líneas de texto?

Para añadir texto a nuestro fichero existente, utilizaremos ‘a’ append, de la misma forma que con un fichero nuevo tenemos que usar write() para escribir en el fichero. Los datos se añaden al final del fichero.

fichero = open('archivo.txt', 'a')
fichero.write('archivo modificado con una línea más')

↓ Nuestro archivo contiene
# a
# b
# c
# d
# archivo modificado con una línea más

Renombrar fichero con Python

Para renombrar un fichero, tenemos que hacer uso de la librería de Python os. Llamaremos a rename incluyendo la ruta del fichero que queremos eliminar seguida de la nueva.

Veámoslo con un ejemplo:

import os
os.rename('archivo.txt', 'nuevo_archivo.txt')

↓ El fichero se ha renombrado

Eliminar fichero con Python

Para eliminar un fichero, tenemos que hacer uso de la librería de Python os. Llamaremos a remove incluyendo la ruta del fichero que queremos eliminar.

Vamos a ver otro ejemplo en el que eliminaremos el archivo con el que venimos trabajando para estos últimos ejemplos.

import os
os.remove('nuevo_archivo.txt')

↓ El fichero se ha eliminado

Resumen de acciones con ficheros en Python

openrReadLeer
openaAppendAgregar
openwWriteEscribir
openxCreateCrear
opentTextTexto
openbBinaryBinario

Estructura with open() as

Cuando trabajamos con archivos, es conveniente cerrarlos una vez que se han utilizado. Utilizando la estructura with open() as de Python, podemos evitar tener que estar pendiente del cierre.

with open('lorem.txt', 'a') as fichero:
    fichero.write('\núltima línea agregada')

↓ Nuestro archivo mantiene lo que tenía más
# última línea agregada

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *