Cuarto día

Anuncio
Logo
IAA-CSIC
Curso
organizado por
el Gabinete de
Formación del
CSIC
Curso de Python Inicial
Librería estándar
Contenidos
¿Qué es?
¿Para qué sirve?
¿Cómo se usa?
¿Qué incluye?
• Interfaz con el sistema operativo
• Matemáticas
• Ficheros y directorios
• Búsqueda de patrones
• Fechas y horas
• Redirección de entrada salida y terminación de programas
• Persistencia
• Rutas
• Multiproceso
• Compresión
• Generación de números aleatorios
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
2
¿Qué es?
• La librería estándar contiene varios tipos de
componentes.
– Tipos de datos que pueden ser considerados como parte
del núcleo de Python (números y listas).
– Funciones internas y excepciones.
– La mayor parte de la librería está constituida por un amplio
conjunto de módulos que permiten expandir la
funcionalidad de Python.
• Se distribuye junto con el intérprete.
• Con cada nueva versión de Python, se mejora y amplía
la funcionalidad.
http://docs.python.org/library/index.html
10/04/2013
César Husillos
Víctor Terrón
3
¿Para qué sirve?
• Lo que hace diferente a Python de otros lenguajes de alto
nivel es, además de su sencillez, su librería estándar.
• Los cientos de módulos que implementa lo hacen portable
a cualquier ordenador (aunque ciertamente algunos son
dependientes del Sistema Operativo) .
• La librería es de propósito general: sirve para cualquier
desarrollo.
• Gran parte de nuestro trabajo está ya hecho
(REUTILIZACIÓN).
• Los módulos ya han sido probados.
• El tiempo que invirtamos en leer la documentación lo
recuperaremos con creces cuando programemos
aplicaciones.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
4
¿Cómo se usa?
• Lo difícil es no perderse en la maraña de módulos
existentes.
• Tras localizar el módulo que creemos que nos
sirve para nuestra tarea, simplemente lo
importamos a nuestro espacio de trabajo y
utilizamos lo que necesitamos.
• Visite la web
http://docs.python.org/py-modindex.html
Para echar un vistazo rápido a los módulos de la
librería.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
5
Módulo sys
USO DEL SISTEMA OPERATIVO
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
6
Módulo sys
Ya son conocidas sus capacidades para la gestión
de parámetros de entrada a scripts Python
– propiedad argv
También se ha utilizado para modificar la ruta de
búsqueda de módulos Python
– propiedad path
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
7
Módulo sys: Forzar fin de ejecución
Aunque no es programación de estilo, supongamos
que, en un momento dado,
• bien porque el script tarda demasiado en
ejecutarse,
• O porque se da cierta condición crítica,
necesitamos terminar la ejecución de un script.
sys.exit([status])
donde status es un entero que sirve para
informar del motivo de la finalización.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
8
Módulo sys: Forzar fin de ejecución.
Ejemplo.
Fichero: salida.py
Desde el intérprete
import sys
if len(sys.argv) < 2:
sys.exit(1)
print sys.argv[1:]
10/04/2013
>>> import sys
>>> import subprocess
>>> subprocess.call(['p
ython', 'salida.py'])
1
>>> subprocess.call(['p
ython', 'salida.py', 'p
arametro'])
['parametro']
0
César Husillos Rodríguez
Víctor Terrón Salas
9
Módulo sys: Forzar fin de ejecución.
Ejemplo (II).
También sirve para salir del intérprete
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
10
Módulo sys: Redirección de
entrada/Salida
Ejecutamos un script y nos vamos a tomar un café. Al
regresar vemos por pantalla el resultado. (Lo normal)
• ¿Y si quiero ejecutar varios de forma secuencial (o
simultánea)?.
– Las salidas por pantalla se mezclarán o serán demasiado
largas para registrarse totalmente en la consola.
• En otras ocasiones puede ejecutar programas que
pidan información de forma interactiva para poder
llevar a cabo sus tareas.
– ¿Tengo que estar presente para la interacción?
Solución: redirección
sys.stdin, sys.stdout, sys.stderr
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
11
Módulo sys: Redirección de
entrada/Salida. Ejemplo.
>>> import sys
>>> out = sys.stdout
>>> fout = open(‘saludo.out', 'w')
>>> sys.stdout = fout
>>> print ‘Hola mundo’
>>> sys.stdout = out
>>> fout.close()
>>> print ‘Hola mundo’
‘Hola mundo’
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
12
Módulo sys: Redirección de
entrada/Salida. Ejemplo (II).
Abrimos con el block de notas el fichero
saludo.out y encontramos:
Hola mundo
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
13
EJERCICIOS: 1 Y 2
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
14
Módulo subprocess
PROCESOS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
15
Ejecución de Procesos
Python se ha hecho popular por varias razones:
• Sintaxis simple y legible.
• Librerías estándar.
• Gran cantidad de módulos disponibles para trabajo en
ciencia, ingeniería, comunicaciones, …
• Fácil integración con otros lenguajes.
• Abundante documentación.
• Como lenguaje “pegamento” ya que, entre otras cosas,
permite el control de parámetros en la ejecución de
“programa externos”.
Esto último es extremadamente sencillo mediante el uso del
módulo subprocess.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
16
Ejecución de Procesos: call
subrocess.call (comando [,
shell=False, stdin=None, stdout=None, stderr=None])
•
Comando, es la orden a ejecutar. Puede ser una lista o una cadena.
•
stdin / stdout / stderr, son objetos fichero que representan a la entrada estándar, salida estándar y salida
de error estándar
–
stdin, es la entrada estándar (teclado). También podrá ser un objeto fichero abierto en modo lectura del
que se llerán los parámetros
de entrada que necesite el script.
–
stdout y stderr, serán la salida estándar y salida estándar de mensajes de error. Pueden ser además, objetos ficheros abiertos en
modo escritura donde se almacenará cualquier ‘print’ realizado en el código y cualquier mensaje de error (excepción) lanzado por
nuestro programa.
•
shell, es el formato del comando.
–
shell = False, como lista
–
shell = True, como cadena de caracteres.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
17
Ejecución de Procesos. Ejemplo.
●
shell = False
>>> import subprocess
>>> subprocess.call([‘python', ‘saludo.py ', ’mundo’])
>>> Hola mundo
● shell = True
>>> subprocess.call(‘python saludo.py mundo’)
>>> Hola mundo
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
18
Ejecución de Procesos.
Salida a fichero
Queremos que la salida de un programa llamado
con subprocess.call se escriba en un fichero
>>> fd = open (‘fichero_salida’, ‘w’)
>>> subprocess.call([‘python', ‘saludo.py ', ’mundo’], stdout = fd)
>>> fd.close ()
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
19
EJERCICIOS: 3 Y 4
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
20
Módulo datetime
TRABAJO CON FECHAS Y HORAS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
21
Horas y Fechas
• En ocasiones necesito saber la hora a la que se
ejecutó un script y/o el tiempo transcurrido.
• A veces necesito saber el intervalo temporal
entre dos fechas.
• Quizá necesite parar la ejecución de un
programa tras un intervalo de tiempo de espera
(una petición web sin respuesta).
• Todo esto y más se puede realizar con el módulo
datetime
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
22
Horas y Fechas: Módulos
Clases del
módulo
datetime
date, time, datetime, timedelta
Se pueden
crear objetos
mediante sus
constructores
datetime.date(año, mes, dia)
datetime.time(hora[, minuto[, segundo[, microsegundo[, tzinfo]]]])
datetime.datetime(año, mes, dia[, hora[, minuto[, segundo[, microsegundo[, tzinfo]]]]])
datetime.timedelta([dias[, segundos[, microsegundos[, millisegundos[, minutos[, horas[, semanas]]]]]]])
O se pueden
crear a partir
de la fecha y
hora del
sistema:
10/04/2013
datetime.date.today()
datetime.datetime.now([tz])
datetime.datetime.combine(fecha, hora)
César Husillos Rodríguez
Víctor Terrón Salas
23
Horas y fechas: atributos
• Dato tipo datetime.datetime
– year, month, day, hour, minute, second,
microsecond
• Dato tipo datetime.time
– hour, minute, second, microsecond
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
24
Horas y Fechas:
Creación alternativa
Podemos crear objetos tipo datetime.time y
datetime.date a partir de objetos datetime.datetime
>>> import datetime
>>> now = datetime.datetime.now()
>>> d = now.date()
>>> t = now.time()
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
25
Horas y Fechas: Operaciones
Podemos realizar operaciones con fechas.
Operación
Operador
Ejemplo
Suma
+
t1 + t2
Resta
-
t1 – t2
Comparaciones
==, !=, <, <=, >, >=
t1 < t2
El resultado es un objeto del tipo timedelta.
Atributos de timedelta: days, seconds y
microseconds.
Métodos de timedelta: total_seconds ()
Entonces, estaríamos en condiciones de determinar, por
ejemplo, la duración de nuestros programas o de fragmentos
de código que sospechamos que ralentizan la ejecución.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
26
Horas y Fechas: Ejemplo
Tiempo que tardo en ejecutar unas instrucciones
>>> import datetime
>>> import time
>>> date1 = datetime.datetime.now()
# Esperamos unos segundos…
>>> date2 = datetime.datetime.now()
>>> datediff = date2 - date1
>>> datediff.days, datediff.seconds,
datediff.microseconds
(0, 15, 829942)
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
27
EJERCICIOS: 5
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
28
Módulos os y shutil
FICHEROS Y DIRECTORIOS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
29
Ficheros y directorios
• ¿Cómo obtengo el directorio en el que estoy
ejecutando órdenes en un script o intérprete?
• ¿Cómo creo y borro directorios y ficheros?
• ¿Cómo accedo al contenido de un directorio?
• ¿Cómo copio, muevo o borro un fichero?¿Cómo
realizo esas operaciones de forma recursiva sobre
un directorio?
Todo esto y más con los módulos
os y shutil
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
30
Directorio de trabajo
Método getcwd () del módulo os
• Devuelve el directorio actual de trabajo
Método chdir () del módulo os
• Cambia el directorio de trabajo
>>> import os
>>> os.getcwd()
‘E:\\presentaciones\\pyhon_inicial\\codigo'
>>> os.getcwd()
‘C:\\'
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
31
Directorios: Crear
os.mkdir (path)
• crea el directorio 'path'.
os.makedirs (path)
• crea recursivamente los subdirectorios
necesarios para generar 'path'.
Ejemplo:
>>> os.mkdir ('pruebaDir')
>>> os.mkdir ('pruebaDir\\subdir1\\subdir1_1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory:
'pruebaDir\\subdir1\\subdir1_1'
>>> os.makedirs ('pruebaDir\\subdir1\\subdir1_1')
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
32
Directorios: Eliminar
os.rmdir(path)
• borra el directorio 'path'. Da error si no está vacío.
os.removedirs(path)
• borrado recursivo de subdirectorios hasta eliminar
el directorio base de 'path'. Lanza OSError si no
consigue su objetivo.
>> import os
>>> os.rmdir('pruebaDir\\subdir1\\subdir1_1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 39] Directory not empty: 'pruebaDir\\subdir1\\subdir1_1'
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
33
Directorios: Copiar
Usamos la función copytree del módulo shutil.
shutil.copytree(origen, destino[, symlinks = False])
• Copia recursivamente el contenido del directorio 'origen',
en 'destino'.
• El directorio de destino NO DEBE existir.
• Se creará 'destino', así como los directorios necesarios
hasta llegar hasta la ruta dada.
• Si symlinks = False, se copian los enlaces simbólicos. Si es
True, se copia el contenido enlazado en el nuevo
directorio.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
34
Directorios: Copiar.
En el intérprete...
>>> import shutil
>>> shutil.copytree ('E:\\presentaciones\\python_inicial\\codigo',
'E:\\presentaciones\\python_inicial\\codigo_backup')
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
35
Directorios: Renombrar
Usamos la función rename del módulo os.
os.rename(origen, destino)
Falla cuando destino existe.
>>> os.rename('pruebaDir', 'probeDir')
Sirve también para ficheros. En este caso, si destino existe, lo reemplazará
si se dispone de permisos.
>>> os.rename('probeDir\\subdir1\\subdir1_1\\readme',
'probeDir\\subdir1\\subdir1_1\\README')
donde se tiene ahora
C:\presentaciones\python_inicial>
dir probeDir\subdir1\subdir1_1\
02/03/2012
10/04/2013
12:13
303
César Husillos Rodríguez
Víctor Terrón Salas
README
36
Directorios: Contenido
•
os.listdir(path)
Devuelve una lista no ordenada de nombres y directorios contenidos en 'path'.
os.walk(path)
Proporciona todos los nombres de ficheros y directorios que cuelgan del
directorio 'path'.
•
>>> for i in os.walk ('E:\\presentaciones\\python_inicial\\ejercicios'):
print i
('E:\\presentaciones\\python_inicial\\ejercicios', [], ['ejercicio1.py',
'ejercicio2.py', 'ejercicio3.py', 'ejercicio4.py', 'ejercicio_noplanteado.py'])
Para cada directorio encontrado a partir de 'path' produce una tupla
(directorio, subdirectorios, ficheros)
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
37
Directorios: Contenido. Ejemplo
Partimos de la estructura de
ficheros
probeDir -- subdir1 -- subdir1_1-- README
|-- subdir2 --- file1.txt
|-- file2.txt
|-- file3.txt
10/04/2013
Ejecuto ambos métodos:
>>> import os
>>> os.listdir('probeDir')
['subdir2', 'subdir1']
>>> for path in os.walk('probeDir'):
... print path
...
('probeDir', ['subdir2', 'subdir1'], [])
('probeDir\\subdir2', [], ['file2.txt', 'fil
e1.txt', 'file3.txt'])
('probeDir\\subdir1', ['subdir1_1'], [])
('probeDir\\subdir1\\subdir1_1', [],
['README'])
César Husillos Rodríguez
Víctor Terrón Salas
38
Ficheros: Copia y Borrado
• shutil.copy(origen, destino)
Copia, además, todos los permisos de un fichero a otro.
>>> import shutil
>>> shutil.copy('pyregion1.0.1.tar.gz', 'pyregion1.0.1.copy.tar.gz')
• os.remove(path)
Borra el fichero dado por path
>>> import os
>>> os.remove('pyregion1.0.1.copy.tar.gz')
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
39
Ficheros: Mover
• os.rename(viejo, nuevo)
Ya vista en el caso de renombrado de directorios.
• shutil.move(origen, destino)
Mueve recursivamente un fichero o un directorio 'origen' a 'destino'.
>>> import shutil
>>> shutil.move('pyregion1.0.1.tar.gz',
‘C:\\Users\\cesar\\Documents')
>>> (Ctrl+D) # salimos del intérprete
C:\> dir C:\Users\cesar\Documents\*.tar.gz
C:\Users\cesar\Documents\pyregion1.0.1.tar.gz
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
40
Módulo os.path
MANEJO DE RUTAS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
41
Rutas
• Dada una ruta, ¿cómo separo el nombre del fichero y su
directorio?
• Necesito la extensión de un fichero, ¿cómo?
• Dado un fichero, ¿cómo determino la ruta absoluta?
• ¿Cómo creo una nueva ruta a partir de rutas parciales?
• Necesito comprobar que la ruta a un fichero o directorio
existe
• ¿Cómo sé si una ruta es un fichero o un directorio?
• Necesito conocer el tamaño que ocupa un fichero.
¿Cómo?
Todo lo que necesitamos está en el módulo
os.path
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
42
Rutas: Separar directorio y nombre
• os.path.split (ruta)
Esta función descompone 'ruta' en forma de tupla de dos
elementos: (directorio, nombre)
>>> import os.path
>>> os.path.splitext
(‘C:\\Users\\cesar\\curso_python\\herencia.py’)
(‘C:\\Users\\cesar\\curso_python’, ‘herencia.py’)
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
43
Rutas: Extensión de un fichero
• os.path.splitext (ruta)
Esta función descompone 'ruta' en forma de tupla de dos elementos:
(ruta2, extension)
donde 'ruta2' contiene 'ruta' hasta el último punto que corresponde a
la extensión.
Ejemplo:
>>> import os.path
>>> os.path.splitext
('C:\\Users\\cesar\\curso_python\\herencia.py')
('C:\\Users\\cesar\\curso_python\\herencia', '.py')
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
44
Rutas: Ruta absoluta
• os.path.abspath (path)
Esta función obtiene la ruta absoluta ‘path’. Es equivalente
concatenar la ruta absoluta del directorio actual con ‘path’.
Ejemplo:
>>> import os.path
>>> os.path.abspath ('herencia.py')
'C:\\Python27\\herencia.py'
>>> import os
>>> os.getcwd ()
'C:\\Python27'
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
45
Rutas: Concatenación
os.path.join (directorio, nombre)
Esta función compone y devuelve una nueva ruta
dada por
directorio + nombre.
Ejemplo:
>>> os.path.join ('D:\\directorio_base\dir1',
'dir2\\fichero.extension')
'D:\\directorio_base\\dir1\\dir2\\fichero.
extension'
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
46
Rutas: Validación
• os.path.exists (ruta)
Si la ruta especificada por el parámetro existe, devuelve True. Si no
existe, devuelve False.
Ejemplo:
>>> import os
>>> os.path.exists
('D:\\directorio_base\\dir1\\dir2\\fichero.extension')
False
>>> os.path.exists ('C:\\Users')
True
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
47
Rutas: ¿Directorio o fichero?
os.path.isdir (ruta)
• Si la ruta especificada por el parámetro corresponde a un
directorio, devuelve True. Si no existe, devuelve False.
• Sigue enlaces simbólicos.
os.path.isfile (ruta)
• Si la ruta especificada por el parámetro corresponde a un
fichero, devuelve True. Si no existe, devuelve False.
• Sigue enlaces simbólicos.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
48
Rutas: ¿Directorio o fichero?. Ejemplo.
>>> import os
>>> os.path.isdir ('C:\\Users')
True
>>> os.path.isfile ('C:\\Users')
False
>>> os.path.isdir ('C:\\Python27\\README.txt')
False
>>> os.path.isfile ('C:\\Python27\\README.txt')
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
49
Rutas: Propiedades de ficheros
• os.path.getsize (ruta)
Devuelve el tamaño en bytes del fichero referenciado por 'ruta'.
Ejemplo:
>>> import os
>>> os.path.getsize ('C:\\Python27\\README.txt')
54967L
(1 kilobyte (KB) = 1024 bytes (B))
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
50
Módulo glob
RUTAS: BÚSQUEDAS APROXIMADAS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
51
Rutas: Búsquedas aproximadas
Usaremos la función glob del módulo glob.
glob.glob (pathmodel)
Busca ficheros que verifique el patrón 'pathmodel'.
El módulo glob reproduce la sintaxis de caracteres
comodín de la shell.
Comodín
Descripción
*
Reemplaza a 0 o muchos caracteres
?
Reemplaza a un carácter simple
[caracteres]
Reemplaza a cualquiera de los caracteres dentro de los corchetes
[!caracteres]
Reemplaza a cualquiera de los caracteres excepto los dados
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
52
Rutas: Búsquedas aproximadas.
Ejemplo
>>> import glob
>>> glob.glob ('C:\\Python27')
['C:\\Python27']
>>> glob.glob ('C:\\Python27\\*')
['C:\\Python27\\DLLs', 'C:\\Python27\\Doc',
'C:\\Python27\\include', 'C:\\Python27\\Lib',
'C:\\Python27\\libs', 'C:\\Python27\\LICENSE.txt',
'C:\\Python27\\NEWS.txt',
'C:\\Python27\\python.exe',
'C:\\Python27\\pythonw.exe',
'C:\\Python27\\README.txt',
'C:\\Python27\\Scripts', 'C:\\Python27\\share',
'C:\\Python27\\tcl', 'C:\\Python27\\Tools']
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
53
>>> glob.glob ('C:\\Python27\\[ps]*')
['C:\\Python27\\python.exe',
'C:\\Python27\\pythonw.exe',
'C:\\Python27\\Scripts', 'C:\\Python27\\share']
>>> glob.glob ('C:\\Python27\\[!ps]*')
['C:\\Python27\\DLLs', 'C:\\Python27\\Doc',
'C:\\Python27\\include', 'C:\\Python27\\Lib',
'C:\\Python27\\libs', 'C:\\Python27\\LICENSE.txt',
'C:\\Python27\\NEWS.txt',
'C:\\Python27\\README.txt', 'C:\\Python27\\tcl',
'C:\\Python27\\Tools']
>>> glob.glob ('C:\\Python27\\?EADME.txt')
['C:\\Python27\\README.txt']
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
54
EJERCICIOS: 6, 7, 8, 9, 10, 11, 12, 13
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
55
Módulo math
MATEMÁTICAS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
56
Matemáticas
Todo lo que necesitamos lo encontraremos en el
módulo
math
Contiene definiciones de constantes y funciones
matemáticas básicas.
Constantes
pi
Número pi
e
Número e (base del logaritmo neperiano)
Conversión angular
degrees (x)
Transforma radianes a grados
radians (x)
Transforma grados a radianes
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
57
Matemáticas (II)
Funciones trigonométricas
math.acos(x)
devuelve el coseno del arco 'x' (en radianes)
math.asin(x)
Seno del arco ‘x’
math.atan(x)
arcotangente
math.sin(x)
devuelve en seno de 'x'. ('x' en radianes)
Funciones hiperbólicas
math.tan(x)
Tangente
math.acosh(x)
Devuelve el coseno hiperbólico del arco ‘x’ (en rad)
math.asinh(x)
Seno del arco hiperbólico ‘x’
math.atanh(x)
Arcotangente hiperbólica
math.cosh(x)
Devuelve el coseno hiperbólico de x.
math.sinh(x)
Seno hiperbólico
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
58
Matematicas (III)
Exponenciales y logarítmicas
math.exp(x)
exponencial en base e
math.log(x[, base])
si no le damos una base, toma e (neperiano)
math.log1p(x)
devuelve el logaritmo de 1+x (base e)
math.log10(x)
logaritmo decimal
math.pow(x, y)
eleva la base 'x' al exponente 'y'
math.sqrt(x)
raíz cuadrada de 'x'
math.hypot(x, y)
devuelve la norma euclídea (sqrt(x ** 2 + y ** 2))
Funciones de redondeo y caracterización
math.fabs(x)
valor absoluto de x
math.factorial(x)
factorial. Lanza ValueError si x no es entero o < 0
math.floor()
devuelve el mayor entero <= x
math.ceil(x)
devuelve el menor entero >= x
math.fmod(x)
resto de la división entera (de acuerdo a C)
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
59
Matemáticas. Ejemplo
>>> import math
>>> math.fabs(3.5)
>>> math.pi
3.5
3.1415926535897931
>>> math.ceil(3.5)
>>> math.e
4.0
2.7182818284590451
>>> math.ceil(3.4)
>>> math.degrees(math.pi)
180.0
>>> math.radians(360)
6.2831853071795862
>>> math.exp(1)
2.7182818284590451
>>> math.log(4,2)
4.0
>>> math.fmod(5,2)
1.0
>>> math.fmod(5.4,2)
1.4000000000000004
>>> math.ceil(3.5)
4.0
>>> math.ceil(3.4)
2.0
4.0
>>> math.log10(1000)
>>> math.fmod(5,2)
3.0
1.0
>>> math.pow(3,2.5)
>>> math.fmod(5.4,2)
15.588457268119896
1.4000000000000004
>>> math.hypot(1,1)
1.4142135623730951
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
60
EJERCICIOS: 14 Y 15
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
61
Módulo Pickle
PERSISTENCIA DE OBJETOS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
62
Persistencia de Objetos: Serialización
• Consiste en el almacenado rápido en fichero de cualquier objeto python
para su posterior carga y uso.
– Por ejemplo, un diccionario con valores o rangos de parámetros válidos para la
ejecución de un script, un conjunto de templates estelares o extragalácticos, …
• El módulo Pickle codifica y decodifica objetos de cualquier tamaño, por
muy complicada que sea su estructura interna. Podemos usarlo como
superclase de la que heredar.
• cPickle es otra de las posibilidades. Está implementado en C y se estima
en unas 1000 veces más veloz que Pickle. El problema es que no es
heredable.
• Ambos módulos implementan funciones similares.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
63
Persistencia de objetos (II)
Sólo necesitamos dos funciones de este módulo:
• pickle.dump(objeto, objeto_fichero_permiso_
escritura)
Con dump, guardamos el ‘objeto’ en un ‘objeto_fichero’
con permisos de escritura. Tendremos que crearlo de esta
forma:
objeto_fichero = open (‘ruta_fichero’, ‘w’)
• pickle.load(objeto_fichero_permiso_lectura)
Abrimos un fichero en modo lectura y se lo pasamos a
‘load’. Retorna el objeto tal y como se guardó con
‘dump’.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
64
Persistencia de objetos. Ejemplo.
>>> import pickle
>>> data = {'entero': 3, 'float': 2.33, 'complejo': 1+3j, 'lista': range(100), 'tupla':
(1,2,3), 'diccionario': {'nombre': 'Sara', 'edad': 20}}
>>> fout = open('fichero.pick', 'w')
>>> pickle.dump(data, fout)
>>> data = {}
>>> fout.close()
>>> fin = open('fichero.pick', 'r')
>>> new_data = pickle.load(fin)
>>> new_data['entero']
3
>>> new_data
{'tupla': (1, 2, 3), 'float': 2.3300000000000001, 'complejo': (1+3j), 'entero': 3,
'lista': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87,88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'diccionario': {'edad': 20, 'n
ombre': 'Sara'}}
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
65
EJERCICIOS: 16 Y 17
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
66
Módulo random
NÚMEROS ALEATORIOS
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
67
Números Aleatorios
El módulo
random
implementa la generación de números pseudo-aleatorios para
varias distribuciones (uniforme, normal, lognormal, …)
La primera función que debe llamarse es la de la generación
de la semilla de números aleatorios
random.seed ([x])
donde x es la semilla. Si no se especifica una, se utiliza el valor
del tiempo actual del sistema.
Semillas distintas, dan distintas secuencias de números
aleatorios.
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
68
Números aleatorios. Funciones
Funciones para enteros
random.randrange([start], stop[, ste
p])
Devuelve un número aleatorio entre start y stop, con intervalo entre valores
step.
random.randint(a, b)
Devuelve un número entero entre a y b (ambos inclusive)
Funciones para secuencias
random.choice(seq)
Devuelve un elemento seleccionado al azar de la lista seq
random.shuffle(x)
Baraja la lista x
random.sample(population, k)
Devuelve una muestra de k elementos seleccionados al azar y sin repetición de
la lista population
Funciones para distribuciones matemáticas
random.random()
Devuelve un número float aleatorio en [0, 1)
random.uniform(a, b)
Devuelve un número aleatorio en [a, b] (distribución uniforme)
random.gauss(mu, sigma)
Devuelve un número aleatorio según una distribución gausiana de media mu y
desviación estándar sigma
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
69
Números aleatorios. Ejemplo.
>>> random.random() # float aleatorio x, 0.0 <= x < 1.0
0.37444887175646646
>>> random.uniform(1, 10) # float aleatorio x, 1.0 <= x < 10.0
1.1800146073117523
>>> random.randint(1, 10) # Entero desde 1 a 10, extremos incluidos
7
>>> random.randrange(0, 101, 2) # Entero par desde 0 hasta 100
26
>>> random.choice('abcdefghij') # Elige aleatoriamente un elemento
'c'
>>> items = [1, 2, 3, 4, 5, 6, 7]
>>> random.shuffle(items)
>>> items
[7, 3, 2, 5, 6, 4, 1]
>>> random.sample([1, 2, 3, 4, 5], 3) # Elige 3 elementos
[4, 1, 5]
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
70
EJERCICIOS: 18, 19, 20 Y 21
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
71
Módulo zipfile
FICHEROS EN FORMATO
COMPRIMIDO
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
72
Ficheros Comprimidos
Existen módulos para el trabajo con los formatos
comunes de archivado y compresión, incluyendo:
• zlib
• gzip
• bz2
• zipfile
• tarfile
Nos centraremos en el módulo ‘zipfile’.
Para satisfacer la curiosidad de alumnos inquietos, se recomienda la web
http://docs.python.org/py-modindex.html
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
73
Ficheros comprimidos:
Módulo
zipfile
Métodos básicos del módulo zipfile
Clase de ficheros ZIP. mode será ‘r’ (lectura) , ‘w’ (escritura), ‘a’ (añadir o crear, si no existe).
zipfile.ZipFile (file[, mode])
Permite la lectura y escritura, agregar nuevos datos y listar el
Devuelve
True si filename
es un fichero
ZIP válido. False en caso contrario.
zipfile.is_zipfile(filename)
contenido de un fichero en
formato
estándar
ZIP.
Métodos de la clase ZipFile
Atributos
Devuelve la lista de nombres de elementos dentro del paquete ZIP.
Devuelve un objeto ZipInfo con información del archivo miembro del paquete ZIP llamado
Métodos
ZipFile.getinfo(name)
name.
zipfile.ZipFile (file[, mode])Extrae el miembro llamado name del paquete ZIP. mode es el modo de extracción (‘r’ por
ZipFile.open(name[, mode[, pwd]])
defecto y siempre sólo lectura). pwd es la contraseña para ficheros encriptados.
donde mode será ‘r’ (lectura)
, ‘w’ (escritura), ‘a’ (añadir o crear, si no
existe).
Cierra el fichero ZIP
ZipFile.close()
Tiene más parámetros
opcionales,
serán
tratados
este alternativo de
Extrae el miembropero
memberno
al directorio
actual.
path especificaen
un directorio
ZipFile.extract(member,
[path[, pwd]])
extracción
curso.
Extrae todo el contenido del ZIP al directorio path. Por defecto path es el directorio actual
ZipFile.extractall([path[, members[, pwd]]])
zipfile.is_zipfile(filename) (os.getcwd ())
el contenido
del fichero
pantalla (stdout)
ZipFile.printdir()
Devuelve True si filenameMuestra
es un
fichero
ZIPporválido.
False en caso
Comprueba el fichero ZIP. Devuelve el nombre del primer fichero corrupto del paquete. None
ZipFile.testzip()
contrario.
ZipFile.namelist()
si todo está bien.
ZipFile.write(filename[, arcname[, compress
_type]])
10/04/2013
Escribe el fichero filename en arcname. Si este último no se da, sobreescribe el primero. El
paquete ZIP debió abrirse en formato ‘w’ o ‘a’. De no ser así se lanzará la exceptión del tipo
RuntimeError.
César Husillos Rodríguez
Víctor Terrón Salas
74
Ficheros comprimidos. Ejemplo.
>>> fzip = zipfile.ZipFile ('cosa.zip','a')
>>> os.listdir (os.getcwd ())
['cosa.zip', 'ejercicio1.py', 'ejercicio2.py', 'ejercicio3.py', 'ejercicio4.py']
>>> fzip.write('ejercicio1.py')
>>> fzip.write ('ejercicio2.py')
>>> fzip.printdir ()
File Name
Modified
Size
ejercicio1.py
2012-03-07 20:59:22
681
ejercicio2.py
2012-03-08 00:02:45
207
>>> f = fzip.extract ('ejercicio1.py')'
>>> fzip.close ()
10/04/2013
César Husillos Rodríguez
Víctor Terrón Salas
75
EJERCICIOS: 22
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
76
Curiosidades …
PARA TERMINAR …
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
77
Curiosidad
Recomiendo visitar esta dirección web.
https://pypi.python.org/pypi
• Encontrará 29841 paquetes a fecha del
10/04/2013 desarrollados por la comunidad
Python.
– 19475 en febrero de 2012
• Es un aliciente para seguir trabajando en Python.
– SEGURO que existe algún paquete que es de tu
interés.
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
78
FIN
10/04/2013
César Husillos Rodríguez Víctor Terrón Salas
79
Descargar