Está en la página 1de 35

Programando

dispositivos IoT
Parte II
SIY 6121
Programando dispositivos IoT
Parte II
Introducción

En este clase aprenderemos acerca de:

- Módulos de Python: su lógica, su función, cómo importarlos de diferentes maneras y


presentar el contenido de algunos módulos estándar proporcionados por Python.
- La forma en que los módulos se unen para formar paquetes.
- El concepto de una excepción y su implementación en Python, incluida la instrucción
try-except, con sus aplicaciones y la instrucción raise.
Cadenas y sus métodos específicos, junto con sus similitudes y diferencias en
comparación con las listas.

3
Administración de
módulos
Administración de
módulos
¿Qué es un módulo?

El código de computadora tiene una tendencia a crecer. Podemos decir que el código que
no crece probablemente sea completamente inutilizable o este abandonado.
- Un código más grande siempre significa un mantenimiento más difícil.
- La búsqueda de errores siempre es más fácil cuando el código es más pequeño

Por lo tanto, la recomendación será:


Se deben dividir todas las tareas entre los desarrolladores.
Despues, unir todas las partes creadas en un todo funcional.

Cada una de estas partes se puede (muy probablemente) dividir en otras más pequeñas,
y así sucesivamente. Tal proceso a menudo se denomina descomposición.
¿Cómo se divide una pieza de software en partes separadas pero cooperantes? Esta es la
pregunta. Módulos son la respuesta!!!.
5
Administración de
módulos
¿Cómo hacer uso de un módulo?
El manejo de los módulos consta de dos cuestiones diferentes:
- Utilizar un módulo ya existente, escrito por otra persona o creado por el
programador mismo en algún proyecto complejo.
- Crear un nuevo módulo, ya sea para uso propio o para facilitar la vida de otros
programadores.

Características:
- Un módulo se identifica por su nombre. Si se desea utilizar cualquier módulo,
se necesita saber su nombre.
- Todos estos módulos, junto con las funciones integradas, forman la Biblioteca
estándar de Python
- Cada módulo consta de entidades (como un libro consta de capítulos). Estas
entidades pueden ser funciones, variables, constantes, clases y objetos.

6
Administración de
módulos
Importando un módulo

Para que un módulo sea utilizable, hay que importarlo (piensa en ello como sacar un libro
del estante). La importación de un módulo se realiza mediante una instrucción llamada
import.
»»»import math, sys

La cláusula contiene:

- La palabra reservada import.


- El nombre del módulo que se va a importar.

***import es también una palabra reservada (con todas sus implicaciones).


***La instrucción puede colocarse en cualquier parte del código, pero debe colocarse
antes del primer uso de cualquiera de las entidades del módulo.
7
Administración de
módulos
Ejemplo práctico

Para habilitar el uso de las funciones py y sin utilice la siguiente instrucción:

>>> math.pi math.sin

En resumen las tareas son:

● El nombre del módulo (math).


● Un punto.
● Y el nombre de la entidad (pi).

Código ejemplo

>>> import math


>>> print(math.sin(math.pi/2))

8
Administración de
módulos
Otro método para importar módulos

En el segundo método, la sintaxis del import señala con precisión qué entidad (o
entidades) del módulo son aceptables en el código:

>>> from math import pi

La instrucción consta de los siguientes elementos:

● La palabra reservada from.


● El nombre del módulo a ser (selectivamente) importado.
● La palabra reservada import.
● El nombre o lista de nombres de la entidad o entidades las cuales estan siendo
importadas al namespace.

Por lo tanto, ahora podemos utilizar la función de forma directa

>>> from math import sin, pi


>>> print(sin(pi/2))
9
Administración de
módulos
Módulos útiles

La función general llamada random() (no debe confundirse con el nombre del módulo)
produce un número flotante x entre el rango (0.0, 1.0) - en otras palabras: (0.0 <= x < 1.0).

La función seed() es capaz de establecer la semilla del generador. Te mostraremos dos de


sus variantes:

● seed() - establece la semilla con la hora actual.


● seed(int_value) - establece la semilla con el valor entero int_value.

>>> from random import random, seed


>>> seed(0)
>>> for i in range(5):
>>> print(random())

10
Administración de
módulos
Construcción de módulos y paquetes

● Un módulo es un contenedor lleno de funciones - puedes empaquetar tantas funciones como desees
en un módulo y distribuirlo por todo el mundo.
● Por supuesto, no es una buena idea mezclar funciones con diferentes áreas de aplicación dentro de
un módulo (al igual que en una biblioteca: nadie espera que los trabajos científicos se incluyan entre
los cómics), así que se deben agrupar las funciones cuidadosamente y asignar un nombre claro e
intuitivo al módulo que las contiene (por ejemplo, no le des el nombre videojuegos a un módulo que
contiene funciones destinadas a particionar y formatear discos duros).
● Crear muchos módulos puede causar desorden: tarde que temprano querrás agrupar tus módulos de
la misma manera que previamente has agrupado funciones: ¿Existe un contenedor más general que
un módulo?.
● Sí lo hay, es un paquete: en el mundo de los módulos, un paquete juega un papel similar al de una
carpeta o directorio en el mundo de los archivos.

11
Administración de
módulos
Construcción de módulos y paquetes

Se necesitan dos archivos para realizar esta tarea. Cree archivo vacio module.py

#touch module.py

El segundo archivo contiene el código usando el nuevo módulo. Su nombre es main.py. Su


contenido:

#vim main.py

import module.py

Nota: ambos archivos deben estar ubicados en la misma carpeta.

Inicia el IDLE y ejecuta el archivo main.py

12
Administración de
módulos
Construcción de módulos y paquetes

- Al ejecutar un archivo que referencia un módulo local se crea una subcarpeta de


nombre __pycache__.
- Al interior de la carpeta pycache hay un archivo llamado module.cpython-xy.pyc
donde x y y son dígitos derivados de tu versión de Python (por ejemplo, serán 3 y 4 si
utilizas Python 3.4).
- El contenido del archivo es completamente ilegible para los humanos. Tiene que ser
así, ya que el archivo está destinado sólo para uso de Python.
- Cuando Python importa un módulo por primera vez, traduce el contenido a una
forma "semi" compilada. El archivo no contiene código en lenguaje máquina: es
código semi-compilado interno de Python, listo para ser ejecutado por el intérprete
de Python. Como tal archivo no requiere tantas comprobaciones como las de un
archivo fuente, la ejecución comienza más rápido y también se ejecuta más rápido.

13
Manejo de excepciones
Manejo de excepciones

- La palabra reservada try comienza con un bloque de código el cual puede o no estar
funcionando correctamente.

- Después, Python intenta realizar la acción arriesgada: si falla, se genera una excepción y
Python comienza a buscar una solución.

try:
print("1")
x=1/0
print("2")
except:
print("Oh cielos, algo salio mal...")
print("3")

- La palabra reservada except comienza con un bloque de código que será ejecutado si
algo dentro del bloque try sale mal.
15
Manejo de excepciones

Ejemplo de manejo de excepciones

try:
x = int(input("Ingresa un número: "))
y=1/x
except:
print("Oh cielos, algo salio mal...")

print("FIN.")
=============================================================================================
try:
x = int(input("Ingresa un número: "))
y=1/x
print(y)
except ZeroDivisionError:
print("No puedes dividir entre cero, lo siento.")
except ValueError:
print("Debes ingresar un valor entero.")
except:
print("Oh cielos, algo salio mal...")
print("THE END.") 16
Manejo de excepciones

Jerarquía en forma de árbol para la organización de excepciones

17
Caracteres y cadenas
Caracteres y cadenas

Qué son las Cadenas en Python?

En primer lugar, las cadenas de Python son secuencias inmutables (no modificables). Pero
si se pueden analizar

Por ejemplo, la función len() empleada por cadenas devuelve el número de caracteres
que contiene el argumento.

>>> palabra = 'por'

>>> print(len(palabra))

*** La diagonal invertida (\) empleada como un caracter de escape, no está incluida en la
longitud total de la cadena.

>>> yo_soy = 'I\'m'

>>> print(len(yo_soy))
19
Caracteres y cadenas

Cadenas multilínea

Para la generación de cadenas de texto que requieran varias líneas es posible generar una
variable utilizando el apóstrofe triplicado ´´´

>>> multiLinea = """Linea #1 Linea #2"""


>>> print(multiLinea)

Para esto, python utiliza el carácter especial \n el cual es utilizado para forzar un avance
de línea.

20
Caracteres y cadenas

Operaciones con Cadenas

Al igual que otros tipos de datos, las cadenas tienen su propio conjunto de operaciones
permitidas, aunque son bastante limitadas en comparación con los números.

En general, las cadenas pueden ser:

● Concatenadas (unidas).
● Replicadas.

La primera operación la realiza el operador + (toma en cuenta que no es una adición o


suma)

La segunda por el operador * (toma en cuenta de nuevo que no es una multiplicación).

21
Caracteres y cadenas

Operaciones con Cadenas

Ejemplo

>>> str1 = 'a'


>>> str2 = 'b'

>>> print(str1 + str2) #imprime ab


>>> print(str2 + str1) #imprime ba
>>> print(5 * 'a') #imprime aaaaa
>>> print('b' * 4) #imprime bbbb

22
Caracteres y cadenas

Cadenas como secuencias: indexación

Las cadenas no son listas, pero pueden ser tratadas como tal en muchos casos.

Por ejemplo, si deseas acceder a cualquiera de los caracteres de una cadena, puedes
hacerlo usando indexación o el número de la ubicación de cada caracter.

>>> exampleString = 'silly walks'


>>> print(exampleString[0]) # Imprime ‘s’

23
Caracteres y cadenas

Cadenas como secuencias: iterando

También es posible utilizar las cadenas como rangos de iteración para la estructura de
repetición de código FOR

# Iterando a través de una cadena


>>> exampleString = 'silly walks'
>>> for ch in exampleString:
>>> print(ch, end=' ')
>>> print()
# Indexando e iterando cadenas
>>> exampleString = 'silly walks'
>>> for indice in range(len(exampleString)):
>>> print(exampleString[indice], end=' ')
>>> print()
24
Caracteres y cadenas

Seleccionando secciones de una cadena

Es posible seleccionar una sección de cadena utilizando como referencia el índice:

>>> alpha = "abdefg" #


>>> print(alpha[1:3]) # bd (tomar desde la posi
>>> print(alpha[3:]) # efg
>>> print(alpha[:3]) # abd
>>> print(alpha[3:-2]) #e
>>> print(alpha[-3:4]) #e
>>> print(alpha[::2]) # adf
>>> print(alpha[1::2]) # beg

25
Manejo de
archivos
Manejo de archivos

Procesamiento de archivos de texto

Para el procesamiento de un archivo de texto se requiere que este se encuentre sin


formato: puede contener solo texto, sin decoraciones adicionales (formato, diferentes
fuentes, etc.).

Es por eso que debes evitar crear el archivo utilizando un procesador de texto avanzado
como MS Word, LibreOffice Writer o algo así. Utiliza los conceptos básicos que ofrece tu
sistema operativo: Bloc de notas, vim, gedit, etc.

Para abrir un archivo con codificacion UTF-8 utilizamos la función open() de la siguiente
manera:

stream = open('file.txt', 'rt', encoding='utf-8')

Donde el argumento de codificación debe establecerse en un valor dentro de una cadena


que representa la codificación de texto adecuada (UTF-8, en este caso).
27
Manejo de archivos

Procesando archivos de texto: readline()

El método readline() intenta leer una línea completa de texto del archivo, y la devuelve
como una cadena en caso de éxito. De lo contrario, devuelve una cadena vacía.
from os import strerror
try:
ccnt = lcnt = 0
s = open('text.txt', 'rt')
line = s.readline()
while line != '':
lcnt += 1
for ch in line:
print(ch, end='')
ccnt += 1
line = s.readline()
s.close()
print("\n\nCaracteres en el archivo: ", ccnt)
print("Lineas en el archivo: ", lcnt)
except IOError as e:
28
print("Se produjo un error de E/S: ", strerr(e.errno))
Manejo de archivos

Procesando archivos de texto: write()

El método para escribir archivos se llama write() y espera solo un argumento: una cadena
que se transferirá a un archivo abierto, el modo de apertura debe reflejar la forma en que
se transfieren los datos - escribir en un archivo abierto en modo de lectura no tendrá
éxito.

No se agrega carácter de nueva línea al argumento de write(), por lo que debes agregarlo
tu mismo si deseas que el archivo se complete con varias líneas.

29
Manejo de archivos

Procesando archivos de texto: write()

El ejemplo crea un archivo llamado newtext.txt (nota: el modo de apertura w asegura que
el archivo se creará desde cero, incluso si existe y contiene datos) y luego pone diez líneas
en él.

from os import strerror

try:
fo = open('newtext.txt', 'wt') #un nuevo archivo (newtext.txt) es creado
for i in range(10):
s = "línea #" + str(i+1) + "\n"
for ch in s:
fo.write(ch)
fo.close()
except IOError as e:
print("Se produjo un error de E/S: ", strerr(e.errno))

30
Solicitudes HTTP
Solicitudes HTTP

Librería Request

La biblioteca de solicitudes es el estándar de facto para realizar solicitudes HTTP en


Python. Resume las complejidades de realizar solicitudes detrás de una API hermosa y
simple para que pueda concentrarse en interactuar con los servicios y consumir datos en
su aplicación.

Comencemos por instalar la biblioteca de solicitudes. Para hacerlo, ejecutar el siguiente


comando:

$ pip install requests

Una vez que la libreria está instalada, se puede utilizar en la aplicación. La importación
tiene este aspecto:

import requests
32
Solicitudes HTTP

La solicitud GET

Los métodos HTTP, como GET y POST, determinan qué acción está intentando ejecutar al
realizar una solicitud HTTP. Además de GET y POST, existen otros métodos comunes que
usará más adelante en este tutorial.

Uno de los métodos HTTP más comunes es GET. El método GET indica que está
intentando obtener o recuperar datos de un recurso específico. Para realizar una solicitud
GET, utilice:

request.get ().

Para probar esto, puede realizar una solicitud GET a la API REST raíz de GitHub llamando a
get () con la siguiente URL:

>>> requests.get('https://api.github.com')
<Response [200]>
33
Solicitudes HTTP

La respuesta a nuestras solicitudes

Una respuesta es un objeto utilizado para inspeccionar los resultados de la solicitud.


Hagamos la misma solicitud nuevamente, pero esta vez almacenamos el valor de retorno
en una variable para que pueda ver más de cerca sus atributos y comportamientos:

>>> response = requests.get('https://api.github.com')

En este ejemplo, capturó el valor de retorno de get (), que es una instancia de Response,
y lo almacenó en una variable llamada respuesta. Ahora puede usar la respuesta para ver
mucha información sobre los resultados de su solicitud GET.

34
Solicitudes HTTP

Otros métodos HTTP

Aparte de GET, otros métodos HTTP populares incluyen POST, PUT, DELETE, HEAD, PATCH
y OPTIONS. request proporciona un método, con una firma similar a get (), para cada uno
de estos métodos HTTP:

>>> requests.post('https://httpbin.org/post', data={'key':'value'})


>>> requests.put('https://httpbin.org/put', data={'key':'value'})
>>> requests.delete('https://httpbin.org/delete')
>>> requests.head('https://httpbin.org/get')
>>> requests.patch('https://httpbin.org/patch', data={'key':'value'})
>>> requests.options('https://httpbin.org/get')

35

También podría gustarte