Google+ Seguidores

sábado, 16 de diciembre de 2017

Modulo Logging para el registro de eventos - Librería estándar Python

Introducción:

El modulo logging de la librería estándar de Python, nos permite rastrear un evento dentro de un software. Por ejemplo, registrar un mensaje de error.

La ventaja de usar registros, es que se pueden configurar para desactivar la salida o guardarse en un archivo. Esta es una ventaja sobre una simple impresión de los errores.

El registro es un medio de seguimiento de eventos que ocurren cuando se ejecuta algún software. El desarrollador del software agrega las llamadas de registro a su código para indicar que se han producido ciertos eventos.


Imagen relacionada

El registro proporciona un conjunto de funciones de conveniencia para un uso de registro simple. Estos son: debug()info()warning()error() critical().



Las funciones de registro se nombran después del nivel o la gravedad de los eventos para los que se usan. Los niveles estándar y su aplicabilidad se describen a continuación (en orden creciente de gravedad):
NivelCuando es usado
DEBUGInformación detallada, generalmente de interés solo cuando se diagnostican problemas.
INFOConfirmación de que las cosas funcionan como se esperaba.
WARNINGUna indicación de que sucedió algo inesperado o indicativo de algún problema en el futuro cercano (por ejemplo, "espacio en disco bajo"). El software sigue funcionando como se esperaba.
ERRORDebido a un problema más serio, el software no ha podido realizar alguna función.
CRITICALUn error grave que indica que el programa en sí no puede continuar ejecutándose.


El nivel predeterminado es WARNING, lo que significa que solo se rastrearán los eventos de este nivel y superiores, a menos que el paquete logging esté configurado para hacer lo contrario.
Los eventos que se rastrean se pueden manejar de diferentes maneras. La forma más sencilla de manejar eventos rastreados es imprimirlos en la consola. Otra forma común es escribirlos en un archivo de disco.


Un ejemplo sencillo:


import logging
logging.warning("Cuidado!!!")
WARNING:root:Cuidado!!!

Este es un ejemplo sencillo del uso de logging. 
El mensaje impreso incluye la indicación del nivel y la descripción del evento, el cual es "Cuidado!!!".

Veamos otro ejemplo:


import logging
logging.warning("Cuidado!!!")
logging.info("Ya te lo advertí.")
WARNING:root:Cuidado!!!

Como pueden observar, el resultado ha sido el mismo que el ejemplo anterior, pero ¿Porqué?. El mensaje de INFO no se imprime ya que el nivel predeterminado es WARNING.

Registrar eventos dentro de un archivo:

Algo muy común es registrar estos eventos dentro de un archivo, esto lo podremos hacer de la siguiente manera:


import logging
logging.basicConfig(filename='registro.log',level=logging.DEBUG)
logging.debug('Este mensaje debe ir al archivo de regitro')
logging.info('Este tambien')
logging.warning('Y este')

Si vamos a nuestro directorio y abrimos el archivo:


DEBUG:root:Este mensaje debe ir al archivo de regitro
INFO:root:Este tambien
WARNING:root:Y este

Deberíamos ver algo como eso.


Cambiar formato de los mensajes:

También podemos cambiar el formato, o la forma en la que se muestra el mensaje, veamos un ejemplo:

import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')
DEBUG:This message should appear on the console

Uno de los usos que le podemos dar, es imprimir la el mensaje junto a la fecha y hora actual.

import logging
logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('es la fecha en que apareció este mensaje.')
2017-12-16 14:59:01,773 es la fecha en que apareció este mensaje.

Podríamos cambiar el formato de la fecha agregando el argumento "datefmt" de la siguiente manera:


import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('es la fecha en que apareció este mensaje.')
12/16/2017 03:08:21 PM es la fecha en que apareció este mensaje.

Ahora se ve mejor.

Bueno, creo que esto es suficiente, si quieres seguir aprendiendo a usar este modulo, te sugiero que vayas a la documentación de logging.

Mi nombres es Luis y fue un placer compartir mis conocimientos con todos ustedes :D.

Seguir Leyendo

viernes, 15 de diciembre de 2017

Trabajando con Números Binarios y Operadores Lógicos en Python

Introducción:

Los seremos humanos usamos los números día a día, desde hace siglos, los números se han vuelto una parte muy importante en nuestra vida diaria. Desde que somos niños nos enseñan a contar, sumar, restar..., las cosas básicas. 

Existen una gran variedad de sistemas numéricos y de numeración, y nuestras computadoras solo saben manipular uno, el sistema binario. A nuestras computadores no les enseñaron igual que a todos nosotros, nuestros equipos no tienen ninguna noción de números, excepto "verdadero" o "Falso", 1 o 0.

En este articulo aprenderemos a usar números binarios en Python, como convertirlos a decimales (y viceversa),  y cómo hacer operaciones con ellos.

Para realizar los ejemplo de hoy, no es necesario ningún modulo externo a la librería estándar de Python. Python pueden trabajar con números binarios muy bien.

Sistema Binario:

El sistema binario, es un sistema de numeración en el que los números son representados por dos cifras: ceros y uno (0 y 1). Es el sistema utilizado por las computadoras debido a que estas trabajan internamente con dos niveles de voltaje,por lo cual su sistema de numeración natural es el sistema binario.


En informática, un número binario puede ser representado por cualquier secuencia de bits (dígitos binarios), que suelen representar cualquier mecanismo capaz de usar dos estados mutuamente excluyentes. Las siguientes secuencias de símbolos podrían ser interpretadas como el mismo valor numérico binario:
1010011011
¦¦¦¦¦¦
xoxooxxoxx
ynynnyyny

Mientras que en el sistema de numeración decimal se usan diez dígitos (diez símbolos), en el binario se usan solo dos dígitos, el 0 y el 1. Un bit o dígito binario puede representar uno de esos dos valores: 0 o 1.

Es muy fácil de comprender, un bit esta encendido (1) o apagado (0).

Para representar números más altos que uno, se debe usar una secuencia de bits. Una secuencia de 8 bits puede almacenar números mucho más grandes, esta secuencia a de 8 bits es denomina byte.
Imagen relacionada

Números Binarios:

binario

Números binarios y su representación decimal.

Veamos eso en la practica:

int('00', 2)
Out[1]:
0

int('01', 2)
Out[2]:
1
int('10', 2)
Out[3]:
2
int('11', 2)
Out[4]:
3
int('100', 2)
Out[5]:
4
int('101', 2)
Out[6]:
5


Supongo que conocen el método int() para la conversión de datos a enteross. El segundo parámetro le dice a Python  que tenemos un un numero basado en 2 elementos.

Para convertir un byte (8 bits) a decimal, debemos escribir una combinación de 8 bits en el primer parámetro. 


int('00010001', 2)
Out[7]:
17
int('1111111', 2)
Out[8]:
255

¿Cual es la magia detrás de todo esto? Cada dígito (De derecha a izquierda) se multiplica por la potencia de 2.

El número '00110010' sería (0 x 2 ^ 0) + (1 x 2 ^ 1) + (0 x 2 ^ 2) + (0 x 2 ^ 3) + ( 1 x 2 ^ 4) + ( 1 x 2 ^ 5) + (0 x 2 ^ 6) + (0 x 2 ^ 7) = 32 + 16 + 2 = 50.

El número  '00101010' sería (0 x 2 ^ 0(1 x 2 ^ 1) +  (0 x 2 ^ 2) + (1 x 2 ^ 3) + (0 x 2 ^ 4) + (1 x 2 ^ 5) + (0 x 2 ^ 6) + (0 x 2 ^ 7)  = 42.

Con la practica diaria, se nos hará muy fácil.


Operadores lógicos: 

inputA =  int ( '0101' , 2 ) 
 
print("Antes de cambiar: " + str ( inputA ) + " " + bin ( inputA ))
print("Después de cambiar en binario: " + bin ( inputA <<  1 ))
print("Después de cambiar en decimal : " + str ( inputA <<  1 ))
Antes de cambiar: 5 0b101
Después de cambiar en binario: 0b1010
Después de cambiar en decimal : 10

Antes de cambiar (0,1,0,1) tenemos el número 5. Después del cambio (1,0,1,0) tenemos el número 10. En python puede usar el operador bitwise left (<<) para desplazarse hacia la izquierda y el operador bitwise right (>>) para desplazarse hacia la derecha.

Operador AND:

Al usar el operador "and", si las dos entradas son positivas, la salida sera positiva:

inputA =  int ( '00100011' , 2 )    # define la entrada de secuencia binaria A 
inputB =  int ( '00101101' , 2 )    # define la secuencia binaria inputB 
 
bin( inputA and inputB )
Out[10]:
'0b101101'


Operador OR:

El operador or (|) verifica las dos entradas, si al menos una entrada es positiva la salida sera positiva:


inputA = int('00100011',2)
inputB = int('00101101',2)

print(bin(inputA))    
print(bin(inputB)) 
print(bin(inputA | inputB))
0b100011
0b101101
0b101111


Bueno, una explicación breve, pero muy importante, y es algo que debemos de saber.

Te invito a que sigas investigando, y aprendiendo. Comparte tu experiencia con nosotros dejando un buen comentario.

Mi nombre es Luis y fue un placer compartir mis conocimientos con todos ustedes :D.
Seguir Leyendo

Entradas más recientes

Powered by Blogger .