Tabla de Contenidos
Ficheros en Python
Bloque perteneciente al curso Introducción a la programación con Python.
Para manipular ficheros, siempre actuaremos de la misma forma:
- Apertura del fichero
- Operaciones de lectura o escritura
- Cierre del fichero
Grabar datos en ficheros (escritura)
# Apertura del fichero en modo escritura ("w") y codificación UTF-8 # Si el fichero no existe, se crea f = open("mensaje.txt", "w", encoding="utf8") # Operaciones de escritura f.write("Un mensaje.\n") f.write("Otro mensaje.") # Cierre del fichero f.close()
Si queremos añadir contenido a un fichero existente, en lugar de sustituir todo su contenido, lo abriremos con el modo “append” (a):
# Apertura del fichero en modo "append" ("a") y codificación UTF-8 # Si el fichero no existe, se crea f = open("mensaje.txt", "a", encoding="utf8") # Operaciones de escritura f.write("Un mensaje más.") # Cierre del fichero f.close()
Si el fichero no existiese o estuviera vacío, append lo crearía y añadiría el texto que indicásemos.
Cargar datos de ficheros (lectura)
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("mensaje.txt", "r", encoding="utf8") # Operaciones de lectura datos = f.read() print(datos) # Cierre del fichero f.close()
Podemos indicar la ruta del fichero en open:
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("/home/tempwin/mensaje.txt", "r", encoding="utf8") # Operaciones de lectura datos = f.read() print(datos) # Cierre del fichero f.close()
Podemos limitar los datos a leer como argumento del método read:
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("mensaje.txt", "r", encoding="utf8") # Operaciones de lectura, limitando los datos a leer # (número de bytes a leer) datos = f.read(10) print(f"Primer bloque: '{datos}'") print(f"Segundo bloque: '{datos}'") # Cierre del fichero f.close()
Si nos interesa leer línea a línea:
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("mensaje.txt", "r", encoding="utf8") # Operaciones de lectura, línea completa (válida para archivos de texto) # (número de bytes a leer) datos = f.readline() print(f"Datos leídos: '{datos}'") # Cierre del fichero f.close()
Otra forma de leer línea a línea un archivo de texto, aprovechando que open devuelve un objetivo iterable:
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("mensaje.txt", "r", encoding="utf8") for linea in f: print(f"Datos leídos: {linea}") f.close()
Alternativa:
# Apertura del fichero en modo lectura ("r"), # especificando codificación UTF-8 f = open("mensaje.txt", "r", encoding="utf8") while True: linea = f.readline() if not linea: break print(f"Datos leídos: {linea}") f.close()
Ejemplo de uso
Lectura de un fichero con datos numéricos y hacer operaciones con todo ello.
Partiendo de un fichero numeros.txt:
2 4 1 66 1 3 5 9 10
Codificamos un programa que sume todos los números que contiene el fichero anterior:
f = open("numeros.txt", "r", encoding="utf8") suma = 0 for linea in f: # Cada línea contiene un texto con un número, que tendremos # que convertir a un valor numérico valor = int(linea) print(valor) suma += valor f.close() print(f"Total: {suma}")
Manipulación de ficheros con with
El bloque with establece un contexto en el que el fichero se abre y se asigna a una variable. Durante la ejecución de las instrucciones que están dentro del with esa variable existe y el recurso (fichero) en cuestión permanece abierto. Al terminar el bloque with, el fichero se cerrará automáticamente como consecuencia de la liberación de la variable asignada.
with open("mensaje.txt", "r", encoding="utf8") as f: for linea in f: print(f"Datos leídos: {linea}")
El uso de de with para la lectura de ficheros es cómodo porque no necesitamos cerrar el fichero explícitamente
Ejemplos prácticos
Tratamiento ficheros CSV
import csv # Lista vacía en la que se irán añadiendo todas las filas organizaciones = [] with open("organizations-100.csv", newline="") as csvfile: reader1 = csv.reader(csvfile, delimiter=",", quotechar='"') for row in reader1: organizaciones.append(row) # Mostramos solo las 5 primeras print(
