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
ten 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
stdinnormalmente 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 destdinpor default. sys.stdout- stdout (significa salida estándar).
- El stream
stdoutnormalmente 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 streamstdout. sys.stderr- stderr (significa salida de error estándar).
- El stream
stderrnormalmente 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) destderr(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.