Entrada/Salida - Introducción a la computación

Anuncio
Entrada/Salida
Introducción a la computación
Juan Manuel Pérez
(en base a slides de Maximiliano Geier)
04/05/2016
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
1 / 21
Introducción
¿Qué vamos a ver hoy?
Vamos a ver distintas formas de ingresarle datos a un programa y obtener
una respuesta.
Teclado/Pantalla
Lı́nea de comandos
Archivos
de texto
binarios
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
2 / 21
Teclado/Pantalla
El programa más fácil
>>> print(’Hola mundo’)
Hola mundo
print imprime sus argumentos en pantalla
¿Qué devuelve? Nada (o sea None)
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
3 / 21
Teclado/Pantalla
Format Strings
>>> str = "mundo"
>>> print("Hola {}".format(str) )
Hola mundo
.format es un método de un string que, dado un “formato” y sus
argumentos, nos devuelve otro string reemplazando .
Nos permite combinar variables para formar otro string
El formato en este caso es "Hello {}", y el argumento es str
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
4 / 21
Teclado/Pantalla
Format Strings: estilo viejo
>>> str = "mundo"
>>> print("Hola %s" % (str))
Hello world
% es un operador entre un string de formato y una tupla que contiene
sus argumentos
En Python 3 se aconseja utilizar format
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
5 / 21
Teclado/Pantalla
Entrada por teclado
>>> nombre = input("Ingresa tu nombre: ")
Ingresa tu nombre: Guido van Rossum
>>> print("Hola {}".format(nombre))
Hola Guido van Rossum
1
input se queda esperando que el usuario ingrese caracteres por medio
del teclado, termina cuando se ingresa un \n (newline)
¿Qué devuelve input? Una cadena de caracteres.
1
Guido van Rossum es el creador de Python. Actualmente trabaja en Dropbox
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
6 / 21
Lı́nea de comandos
Lı́nea de comandos y argumentos
Otra forma de interacción para introducir datos en un programa
python3 suma.py 1 2 3 4
python3: el nombre del programa que se estamos ejecutando.
suma.py 1 2 3 4: los argumentos que le pasamos a python3.
Sı́, ojo: suma.py es un argumento también
¿Cómo accedemos a los argumentos?
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
7 / 21
Lı́nea de comandos
sys.argv: Argumentos al programa
#imprimir.py
import sys
print(sys.argv)
Los argumentos son accesibles desde sys.argv, que es una lista de
cadenas de caracteres.
Primero, hay que importar el módulo sys.
- python3 imprimir.py 1 2 3
[’imprimir.py’, ’1’, ’2’, ’3’]
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
8 / 21
Archivos
Archivos
Un archivo es un recurso disponible a los programas, utilizado para
almacenar información en un medio durable. Los archivos se localizan en
una estructura jerárquica que se denomina árbol de directorios.
Una ruta o path es el camino del árbol (relativo a cierto punto o absoluto)
que hay que recorrer para llegar a un archivo.
/
|__
|__
|
|__
|
|
|__
bin/
etc/
|__ passwd
home/
|__ jmperez/
|__ datos.csv
tmp/
|__ fruta.txt
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
9 / 21
Archivos
Archivos de texto y binarios
Python (y la mayorı́a de los lenguajes de programación) distingue
entre archivos de texto y archivos binarios.
Un archivo de texto se interpreta como texto en alguna codificación
(ASCII, Latin-1, UTF-8, etc). Su procesamiento se lo suele realizar de
a lı́neas que están separadas por los caracteres \n (Linux, Mac) o
\r\n (Windows).
Un archivo binario tiene datos guardados en algún formato arbitrario.
Es responsabilidad del programador interpretarlos de manera
adecuada.
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
10 / 21
Archivos
Archivos de texto vs. Archivos binarios
En la materia vamos a trabajar con archivos de texto. Algunas ventajas:
Podemos ver en cualquier editor de texto si la entrada que queremos
interpretar es correcta (o si la salida lo es).
Su interpretación es independiente de la plataforma (con la excepción
de los finales de lı́nea en Windows).
Python tiene muchas herramientas que nos ayudan al procesamiento.
Desventajas:
Los datos numéricos tienen que ser convertidos para poder operar con
ellos (esto requiere tiempo).
Requieren cierto procesamiento por parte del programador para
interpretar la estructura de los datos.
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
11 / 21
Archivos
Archivos en Python
f = open(’/tmp/fruta.txt’, ’r’)
Los archivos son recursos que tenemos que pedir al sistema operativo
para poder utilizar. En Python, esto se hace por medio de la función
open
El primer argumento que recibe open es el path (relativo o absoluto)
del archivo que queremos abrir.
El segundo argumento indica en qué modo2 queremos abrir el archivo
(solo lectura, lectoescritura, solo escritura, de texto o binario).
open devuelve un file object, que guarda información de estado acerca
del archivo abierto.
2
http://docs.python.org/3/library/functions.html#open
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
12 / 21
Archivos
Cerrar archivos
f = open(’/tmp/fruta.txt’, ’r’)
# leemos y escribimos información acá
f.close()
Una vez que terminamos de trabajar con el archivo, no olvidarse de
cerrarlo con f.close().
Otra forma de hacerlo:
with open(’/tmp/fruta.txt’, ’r’) as f:
# usamos f acá
str = f.read()
print("Acá ya no existe f")
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
13 / 21
Archivos
Leyendo archivos
Supongamos que ya abrimos el archivo /tmp/fruta.txt y el resultado de
la llamada a open lo guardamos en la variable f. Si queremos leer su
contenido tenemos varias opciones
La primera: leer todo el archivo de una
>>> print(f.read())
una linea
otra linea
f.read() nos devuelve un string con todos los contenidos del archivo
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
14 / 21
Archivos
Leyendo archivos: lı́nea por lı́nea
>>> print(f.readline())
una linea
>>> print(f.readline())
otra linea
f.readline() nos devuelve un string con la próxima lı́nea del archivo
¿Y si no hay otra lı́nea? No devuelve nada (o sea None)
Es medio molesto para recorrer todo el archivo.
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
15 / 21
Archivos
Leyendo archivos: recorriendo lı́nea por lı́nea
>>> for line in f.readlines():
...
print(line)
...
una linea
otra linea
f.readlines() nos devuelve una lista de todas las lı́neas del archivo
Otra forma: for line in f:
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
16 / 21
Archivos
Escribiendo archivos
Para escribir, utilizamos el método write:
with open("fruta2.txt", ’w’) as f:
f.write(’una nueva linea\n’)
f.write(’otra nueva linea\n’)
También podemos utilizar print:
with open("fruta2.txt", ’w’) as f:
print(’una nueva linea\n’, file=f)
print(’otra nueva linea\n’, file=f)
La posición en la que vamos a leer o escribir está “almacenada” en el file
object. Cualquier llamada a read, write o print actualiza esa posición
adecuadamente.
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
17 / 21
Archivos
Comma-separated Values (CSV)
CSV es un formato de archivos de texto muy utilizado para almacenar
tablas de valores numéricos.
Consta de una serie de registros, uno por lı́nea.
Cada registro tiene varios campos, separados por coma (u otro
separador, como ;)
Opcionalmente, tenemos un encabezado con los nombres de cada
campo
En lenguaje coloquial, se puede pensar como una tabla o una planilla
de cálculo
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
18 / 21
Archivos
Ejemplo CSV
titulo,autor,a~
no,precio
Rebelión en la Granja,George Orwell,1945,54.00
La Insoportable Levedad del Ser,Milan Kundera,1984,120.50
2001:Odisea en el Espacio,Arthur C. Clarke,1984,120.50
La Gran Revolución Francesa,Piotr Kropotkin,1909, 234.75
Humano demasiado humano,Friedrich Nietzsche,1878,75.00
Fedra,Jean Racine,1659,45.00
El Principito by Gaturro,Nik,2015,0
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
19 / 21
Archivos
Procesando CSV: rstrip
¿Cómo eliminar el ’\n’ final de una lı́nea?
>>> l = ’3.5,6.5,-4.3,0\n’
>>> print(l)
3.5,6.5,-4.3,0
>>> l = l.rstrip(’\n’)
>>> print(l)
3.5,6.5,-4.3,0
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
20 / 21
Archivos
Procesando CSV: rstrip
¿Cómo separar los campos de una lı́nea de CSV?
>>> l = ’3.5,6.5,-4.3,0’
>>> print(l.split(’,’))
[’3.5’, ’6.5’, ’-4.3’, ’0’]
Juan Manuel Pérez (en base a slides de Maximiliano Geier) Entrada/Salida
04/05/2016
21 / 21
Descargar