Module (79%)
Section (82%)

Abriendo el stream por primera vez

Imagina que queremos desarrollar un programa que lea el contenido del archivo de texto llamado: C:\Users\User\Desktop\file.txt.

¿Cómo abrir ese archivo para leerlo? Aquí está el fragmento del código:

try: stream = open("C:\Users\User\Desktop\file.txt", "rt") # aqui se procesa el archivo stream.close() except Exception as exc: print("No se puede abrir el archivo:", exc)

¿Que está pasando aqui?

  • Hemos abierto el bloque try-except ya que queremos manejar los errores de tiempo de ejecución suavemente.
  • Se emplea la función open() para intentar abrir el archivo especificado (ten en cuenta la forma en que hemos especificado el nombre del archivo).
  • El modo de apertura se define como texto para leer (como texto es la configuración predeterminada, podemos omitir la t en la cadena de modo).
  • En caso de éxito obtenemos un objeto de la función open() y lo asignamos a la variable del stream.
  • Si open() falla, manejamos la excepción imprimiendo la información completa del error (es bueno saber qué sucedió exactamente).

Streams pre-abiertos

Dijimos anteriormente que cualquier operación del stream debe estar precedida por la invocación de la función open(). Hay tres excepciones bien definidas a esta regla.

Cuando comienza nuestro programa, los tres streams ya están abiertos y no requieren ninguna preparación adicional. Además, tu programa puede usar estos streams explícitamente si tienes cuidado de importar el módulo sys:

import sys

Porque ahí es donde se coloca la declaración de estos streams.




Los nombres de los streams son: sys.stdin, sys.stdout y sys.stderr.

Vamos a analizarlos:

  • sys.stdin
    • stdin (significa entrada estándar).
    • El stream stdin normalmente se asocia con el teclado, se abre previamente para la lectura y se considera como la fuente de datos principal para los programas en ejecución.
    • La función bien conocida input() lee datos de stdin por default.

  • sys.stdout
    • stdout (significa salida estándar).
    • El stream stdout normalmente está asociado con la pantalla, preabierta para escritura, considerada como el objetivo principal para la salida de datos por el programa en ejecución.
    • La función bien conocida print() envía los datos al stream stdout.

  • sys.stderr
    • stderr (significa salida de error estándar).
    • El stream stderr normalmente está asociado con la pantalla, preabierta para escribir, considerada como el lugar principal donde el programa en ejecución debe enviar información sobre los errores encontrados durante su trabajo.
    • No hemos presentado ningún método para enviar datos a este stream (lo haremos pronto, lo prometemos).
    • La separación de stdout (resultados útiles producidos por el programa) de stderr (mensajes de error, indudablemente útiles pero no proporcionan resultados) ofrece la posibilidad de redirigir estos dos tipos de información a los diferentes objetivos. Una discusión más extensa sobre este tema está más allá del alcance de nuestro curso. El manual del sistema operativo proporcionará más información sobre estos temas.