Entrada y Salida - Universidad de Costa Rica

Anuncio
Universidad de Costa Rica | Escuela de Ingeniería Eléctrica
IE-0117 Programación Bajo Plataformas Abiertas
Entrada y Salida
1.
Entrada estándar
La forma más sencilla de leer datos desde la entrada estándar es usar la función raw_input(), que presenta al
usuario un mensaje y retorna el texto que el usuario introduce:
entrada = raw_input('Escriba su nombre:')
En este caso, la cadena de caracteres ingresada por el usuario se guardará en la variable entrada.
La función raw_input() siempre retorna una cadena de caracteres. Si es necesario leer números o algún otro tipo
de datos, debe hacerse la conversión correspondiente.
2.
Salida estándar
Para imprimir datos en terminal se utiliza el enunciado print:
print "Hola mundo"
print automáticamente introduce un salto de línea al final.
3.
Acceso a arivos
Para acceder a archivos se utiliza la función open():
miarchivo = open('/home/usuario/datos.txt', 'r')
La función open() recibe 2 argumentos. El primero es una cadena de caracteres que corresponde al nombre del
archivo que se quiere acceder. El segundo es también una cadena que indica el modo que se utilizará para acceder el
archivo. Los tres modos más comunes son 'r' para abrir el archivo para lectura, 'w' para abrir el archivo para escritura,
eliminando cualquier contenido previo y 'a' para agregar nuevo contenido al final del archivo.
open() retorna un objeto archivo. Este objeto tiene varios métodos que permiten llevar a cabo todas las operaciones
necesarias sobre el archivo.
3.1. Lectura de arivos
Para leer un archivo pueden usarse varios métodos:
read(): Retorna una cadena de caracteres con el contenido completo del archivo.
readlines(): Retorna una lista con todas las líneas (delimitadas por \n) del archivo.
readline(): Retorna una cadena de caracteres con la línea actual y adelanta el puntero de archivo, de forma que
la próxima vez que se llame a este método se obtenga la línea siguiente. Cuando se alcanza el fin de archivo,
readline() retorna una cadena vacía. Puede usarse dentro de un lazo para recorrer la totalidad del archivo:
1
IE-0117 Programación Bajo Plataformas Abiertas
Entrada y Salida
# Lee la primera línea
linea = miarchivo.readline()
# Itera sobre las próximas líneas
while linea:
# Hace algo con la línea leída anteriormente
...
linea = miarchivo.readline()
Un objeto archivo es iterable, por lo que puede recorrerse usando un lazo for:
for linea in miarchivo:
# Hace algo con la línea leída
...
En cada iteración una nueva línea del archivo será leída y almacenada en la variable linea.
3.2. Escritura en arivos
Para escribir en un archivo puede utilizarse el método write(). Este método toma como argumento una cadena que
será almacenada en el archivo:
datos = open('datos.txt', 'w')
datos.write("Esta cadena se guardará en el archivo\n")
write() sólo puede escribir cadenas, por lo que cualquier otro dato que quiera guardarse debe ser convertido
previamente.
También puede usarse el enunciado print para escribir en archivos:
a = 10
b = "hola"
c = [1, 2, 3]
print >>datos, a, b, c
En este ejemplo, se agregará la siguiente línea al archivo:
10 hola [1, 2, 3]
3.3. El puntero de arivo
Uno de los elementos principales de un objeto archivo es el puntero de archivo. El puntero de archivo indica la
posición actual (en bytes) dentro del archivo. Cuando un objeto archivo es creado, el puntero de archivo se encuentra
al inicio del archivo (posición 0) si el archivo se abrió en los modos 'r' o 'w', o al final si se abrió en modo 'a'. Las
operaciones posteriores de lectura o escritura moverán el puntero de archivo automaticamente. Por ejemplo, readline()
mueve el puntero al inicio de la próxima línea, read() mueve el puntero al final del archivo, etc.
El método tell() retorna un entero con la posición actual del puntero de archivo.
Si es necesario mover de forma explícita el puntero de archivo puede usarse el método seek(). Este método toma 2
argumentos. El primero es un entero con la cantidad de bytes que se quiere mover el puntero y el segundo una constante
que indica el punto a partir del cual se hará el desplazamiento. Los valores posibles para esta constante son os.SEEK_SET
o 0 para indicar un desplazamiento a partir del inicio del archivo, os.SEEK_CUR o 1 para indicar un desplazamiento a
partir de la posición actual y os.SEEK_END o 2 para indicar un desplazamiento desde el final del archivo. Nótese que
2
IE-0117 Programación Bajo Plataformas Abiertas
Entrada y Salida
estas constantes están definidas en el módulo os, por lo que es necesario importar este módulo antes de usarlas.
4.
sys.stdin, sys.stdout y sys.stderr
El módulo sys define tres objetos archivo que siempre están abiertos y accesibles en todos los programas. Estos objetos
archivo son sys.stdin que representa la entrada estándar, sys.stdout que representa la salida estándar y sys.stderr
que representa el error estándar. Estos objetos implementan todos los métodos descritos en las secciones anteriores. Por
ejemplo, si se quiere imprimir un mensaje en el error estándar puede usarse el siguiente código:
print >> sys.stderr, "Ha ocurrido un error en el programa"
4.1. Redirección de entrada y salida estándar
Usando los objetos archivo descritos en la sección anterior es posible redirigir la entrada o la salida de un programa
a un archivo.
# Todo lo que se escriba en la salida estándar se guardará en datos.txt, en vez de
# desplegarse en la terminal
datos = open('datos.txt', 'w')
sys.stdout = datos
print "Esto es una prueba"
Si se ejecuta el código del ejemplo no aparecerá nada en la terminal, pero el archivo datos.txt contendrá la línea
enviada a la salida estándar usando print.
3
Descargar