Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:cursos:introduccion_programacion_python:ficheros

¡Esta es una revisión vieja del documento!


Ficheros en Python

Notas de la formación por parte de la Consellería de Promoción do Emprego e Igualdade y el Clúster TIC Galicia impartida en 2023: Introducción a la programación con Python

Para manipular ficheros, siempre actuaremos de la misma forma:

  1. Apertura del fichero
  2. Operaciones de lectura o escritura
  3. 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

informatica/programacion/python/cursos/introduccion_programacion_python/ficheros.1681922559.txt.gz · Última modificación: por tempwin