Manejo de archivos

← Fundamentos de Python ⌂ Home

Objetivos

Desarrollo

Los archivos son regularmente accedidos a través de una función llamada open, que regresa un objeto de tipo file con referencia hacía el archivo para interactuar con él. Por ejemplo:

archivo = open("tareas.txt") 

Intenta abrir el archivo "tareas.txt" en modo de lectura ‘r’, que es el modo default, si no encuentra el archivo, lanzará una excepción. La función open recibe un segundo parámetro para cambiar el modo en que abrimos un archivo: modos de apertura de un archivo

archivo = open("tareas.txt", 'a') 

En este caso acabamos de abrir el archivo en modo ‘a’ que nos habilita la escritura del mismo junto con la ayuda del método write.

archivo = open("tareas.txt", 'a')
archivo.write("Hacer la tarea de matematicas \n")
archivo.close()

Al finalizar la escritura del archivo vemos la ejecución del método close, el cual nos ayuda a cerrar el flujo de datos creado hacia el archivo. Este conjunto de operaciones (abrir, escribir, cerrar) son tan comunes que se pueden reescribir de la siguiente forma en Python:

with open("tareas.txt", 'a') as archivo:
    archivo.write("Hacer la tarea de matematicas \n")

Crea un contexto donde el archivo solamente existirá dentro de el mismo contexto y automáticamente cerrará el archivo después de su uso.

Demos un poco de forma a las líneas de código creadas anteriormente:

import sys

def guardar(tarea):
    with open('tareas.txt', 'a') as archivo:
        archivo.write(tarea + "\n")

def leer():
   pass

if sys.argv[1].lower() == '--tareas':
    leer()
else:
    guardar(' '.join(sys.argv[1:]))

Vemos que el código para escribir en el archivo tareas se ha movido a una función llamada guardar, así mismo se ha importado el módulo sys para hacer uso de los parámetros por línea de comandos. Logrando una ejecución del programa de la siguiente manera:

python3 tareas.py Comprar jugo

Esa forma de ejecución lo que hace es tomar los argumentos que se le mandan desde consola y los almacena como una tarea nueva.

Muy bien, lo que sigue es listar todas las tareas que tenemos almacenadas en nuestro archivo. Podemos ver que al final de nuestro archivo existe un if que se manda a llamar cuando el primer argumento argv es igual a --tareas, es decir:

python3 tareas.py --tareas

La idea es que cuando se mande a llamar de esa forma, el programa imprima todas las tareas. Pero necesitamos completar el método leer, abriendo el archivo en modo lectura e imprimiendo su contenido.

def leer():
    with open('tareas.txt') as archivo:
        for linea in archivo: # python trata a los archivos como iterables
            print(linea)

Métodos comunes

Nota: para realizar los siguientes ejemplos se requiere del siguiente archivo.

Lectura

Para lectura de archivos se utilizan los métodos:

with open("random-names.txt") as archivo:
    print(archivo.read(10))
    print(archivo.read(10))
    print(archivo.read())

Podemos observar como las lecturas con read mueven el cursor de lectura, colocandolo 10 bytes adelante, por ende las lecturas consecuentes comienzan en ese lugar. Al cerrar el archivo el cursor regresa al inicio.

with open("random-names.txt") as archivo:
    print(archivo.readline())
    print(archivo.readlines())

Una iteración para imprimir unicamente todos los nombre sería la siguiente:

with open("random-names.txt") as archivo:
    for linea in archivo:
        nombre = linea.split(" ")[0] # la función split transforma una cadena a lista, por el caracter de separación que se le pase como argumento
        print(nombre)

Escritura

Para la escritura de archivos se utilizan los métodos:

with open("random-names.txt", 'a') as archivo:
    archivo.writelines(["\nAlejandro Zepeda", "\nJorge Hernandez", "\nMarco Lopez"])
    archivo.write('Alejandro Hernandez')

Lo importante a tener en cuenta aquí es el modo de apertura de el archivo.

Puntero

Para mover el puntero de lectura dentro del archivo usamos:

with open("random-names.txt") as archivo:
    archivo.seek(16)
    print(archivo.tell())
    print(archivo.readline())

Ejercicios

  1. Con el archivo de nombres, imprimir todos los nombres que comienzan con la letra 'D' en su primer apellido.

Fuentes