Google+ Seguidores

lunes, 16 de octubre de 2017

Creación de archivos PDF con Python y Reportlab

¿Que es Reportlab?

ReportLab es el motor de código abierto, ultra robusto y de gran duración para crear documentos PDF complejos y basados ​​en datos y gráficos vectoriales personalizados. Es gratis, de código abierto y escrito en Python.

Para realizar los ejemplos de hoy es necesario descargar la librería reportlab, la cual puedes adquirir ingresando en el siguiente enlace: Descargar Reportlab.


Imagen relacionada

Creando nuestro primer PDF.

Hace unos días, estaba realizando un programa que hacia peticiones a distintos servidores web y se me ocurrió ingresas los datos devueltos por el servidor en una tabla dentro de un archivo con formato PDF.

La cuestión era que nuca había hecho un archivo tan complejo con Python, salia a caminar un rato tratando de pensar en como lograr ese objetivo, no me quedo más remedia que acudir a mi amigo que lo sabe todo, "Google". Luego de investigar por unos cuantos minutos me tope frente a frente con "Reportlab", entre a su sitio oficial (http://www.reportlab.com/) y todo lo que se podía lograr con este sofware.

Luego de investigar a fondo a Reportlab, conseguí mi objetivo.



No es la gran cosa, pero es un comienzo. Como pueden ver e plasmado la respuesta de los servidores en una tabla.

Si quieres ver le código el cual da como resultado la creación del archivo que te mostré previamente, ingresa al siguiente enlace: Código Completo.

Ahora haremos unos ejemplos para entender un poco como funciona Reportlab.

Mi Hola Mundo en Reportlab

Muy bien, haremos un pequeño script que genere un archivo PDF con una cadena de texto la cual sera "Hola Reportlab", ya que es inadecuado conocer a alguien sin saludarlo, veamos como se hace.



#Importamos los modulos necesarios
from reportlab.pdfgen import canvas

doc = canvas.Canvas("Hola Mundo.pdf")

#Escribimos una cadena de Texto dentro del documento
doc.drawString(100, 750, "Hola Mundo!!!")

#Guardamos el documento
doc.save()


Veamos que hace el código presentado anteriormente, antes de continuar quiero mencionar que puedes ver y descargar el codigo ingresando al siguiente enlace: Codigo de Hola Reportlab.

En el script, lo primero que hacemos es importar los métodos de canvas que se encuentran dentro de reportlab.pdfgen. Luego de esto hacemos una instancia de Canvas, y le pasamos como argumento el nombre de nuestro archivo, en este caso yo le e colocado "Hola Reportlab.pdf". Ahora que doc es la instancia de Canvas podemos empezar a usar sus métodos, el método que nos permite escribir cadenas de textos dentro de nuestros documentos PDF, se llama "drawString", a este método le e pasado 3 argumentos, los cuales son, su posición en el eje X, el segundo es su posición en el eje Y y el tercero es la cadena que deseamos escribir en el documento. Luego de esto usamos el método "save" para guardar nuestro documento.

Como pueden ver es algo muy fácil, si abrimos nuestro documento, el resultado debería ser el siguiente:



Si quisiéramos hasta podríamos cambiar la fuente de texto si quisiéramos, esto lo logramos usando el método "setFont" como se muestra a continuación:


doc.setFont("Helvetica", 15)



Trabajando con Figuras y Formas.

Llego la hora de trabajar con figuras, ahora, dibujemos un poco.

Con el método "circle", podemos hacer la forma de un circulo, debemos pasar como argumento su posición en el eje X e Y y el tamaño del circulo, veamos un ejemplo:


doc.circle(300, 700, 100) #Creación del circulo


El resultado debería ser el siguiente: 



Si quisiéramos una linea recta, tendríamos que usar el método "line" de la siguiente manera:



doc.line(20,700,580,700) #Creación de una linea recta


El resultado debería ser el siguiente:



Si no les basta un circulo y una linea, pueden usar otros metodos como ellipse, grid, roundRect, wedger, entre otros.

Una imagen vale más que mil palabras.

¿Que pasa si quiero ingresar una imagen dentro del documento?, muy facil, ¿Como lo se hace?, así:



#Importamos los modulos necesarios
from reportlab.pdfgen import canvas

doc = canvas.Canvas("Hola Mundo.pdf")

#Inseratmos la imagen en el documento
doc.drawImage("https://udemy-images.udemy.com/course/750x422/433798_1de9_4.jpg", -50, 500)

#Guardamos el documento
doc.save()



Para insertar una imagen en el documento se hace uso del método drawImage, al cual le pasamos 3 argumentos, el primero es la ruta de la imagen, en este caso uso una imagen de Internet, los últimos 2 argumentos son la posición de la imagen.

El resultado debería quedarnos así:



Hay algunas cosas que debo aclarar, lo primero es que el método drawImage, solo acepta imágenes con formato "jpg", lo segundo es que la posición de la imagen va a depender de su tamaño.

 Bueno, dejaremos esto hasta aquí, este modulo es extenso así que tratare de traer más artículos referentes a Reportlab, cualquier duda con gusto las responderé. Mi nombre es Luis, y fue un placer compartir mis conocimientos con ustedes :D. 

Seguir Leyendo

viernes, 13 de octubre de 2017

Programación Funcional - Lambda, Map, Filter y Reduce

¿Que es la Programacion Funcional?

Es un estilo de programacion que (como lo indica su nombre) se basa en funciones.
La programación funcional busca usar funciones puras. Las funciones puras no tienen efectos secundarios, no manejan datos mutables o de estado, y devuelven un valor que depende solo de sus argumentos.

Ejemplo: Funciones puras e impuras.


#Función pura
def pure_func(x, y):
    temp = x + 2 * y
    return temp / (2 * x + y)

#Función impura
list = [
def impure(arg):
    list.append(arg)


La función "impure" es una función impura porque cambio el estado de list.

En cambio, la función "pure_func" es una función pura porque devuelve valores que dependen de sus argumentos.


Utilizando Lambda, Map, Filter y Reduce.

Cuando tenemos que realizar operaciones sobre listas, en lugar de utilizar los clásicos loops, podemos utilizar las funciones Map, Reduce, y Filter.

Operador lambda: 
El operador lambda o función lambda, es una forma de crear funciones anónimas, es decir, funciones sin nombre. Estas funciones son desechable, es decir, solo se necesitan donde se han creado. Las funciones lambda se utilizan principalmente en combinación con las funciones Map, Filter y Reduce.

La sintaxis general de una función lambda es bastante simple:
lambda argument_list : expression

El operador lambda o función lambda, es una forma de crear funciones anónimas, es decir, funciones sin nombre. Estas funciones son desechables, es decir, solo se nesecitan donde se han creado. Las funciones lambda se utilizan principalmente en combinatorio con las funciones Map, Filter y Reduce.

La sintaxis general de una funcion lambda es bastante simple:
lambda argument_list : expresison

Ejemplo:


#Función lambda que devuelve la suma de sus dos argumentos:
f = lambda x, y : x + y
f(2 + 2)

#Resultado:

#Segundo ejemplo de lambda
#Función lambda que devuelve la raíz cuadrada de su argumento
a = lambda x : x**1/2
a(233)

#Resultado:
15,2643

Como pueden ver, la función lambda nos devuelve valores que dependen de sus argumentos, esto significa que es una función pura.

 

Operador Map: 

El operador Map, toma una función y un iterable como argumentos, y devuelve un nuevo iterable con la función aplicada a cada argumento . Ejemplo:



#Ejemplo del operador Map
def add_five(x):
    return x + 5

nums = [11, 25, 34, 100, 23]
result = list(map(add_five, nums))
print(result)

#Resultado:
[16, 30, 39, 105, 28]



Como pueden ver, "map" nos a devuelto una lista con todo los elementos de la lista "nums", vemos que a cada elemento le sumo 5.

Si usáramos el operador lambda en vez de declarar la función "add_five", el resultado seria el mismo. Veamos un ejemplo:




#Ejemplo del operador Map y Lambda
nums = [11, 25, 34, 100, 23]
result = list(map(lambda x:x+5, nums))
print(result)

#Resultado:
[16, 30, 39, 105, 28]



Como pueden ver el resultado es el mismo, increíble, ¿Verdad?.
Otra cosa a tener en claro es que en estos dos ejemplo, que para convertir el resultado en una lista, se hace uso del método "list".
 
Operador Filter:

El operado filter (función, lista) ofrece una forma elegante de filtrar todos los elementos de una lista, para los que la función de función devuelve True.  
El operador filter(f, l) necesita una función f como primer argumento. f devuelve un valor booleano, es decir, verdadero o falso. Esta función se aplicará a cada elemento de la lista. Solo si f devuelve True, el elemento de la lista se incluirá en la lista de resultados.


#Usando el operador Filter
nums = [0, 2, 5, 8, 10, 23, 31, 35, 36, 47, 50, 77, 93]
result = filter(lambda x: x % 2 == 0, nums)
print(result)

#Resultado:
[2, 8, 10, 36, 50]


Como pueden observar, el operador filter no incluyo a los elementos que no fueran divisibles entre 2, otra cosa es que hacemos uso de lambda, ya que es utilizado especialmente para este tipo de situaciones.


 Operador Reduce:
 La función Reduce reduce los valores de la lista a un solo valor aplicando una funcion reductora. El primer argumento es la función reductora que vamos a aplicar y el segundo argumento es la lista.



#Usando el operado filter
from functools import reduce #en python3 reduce se encuentra en modulo functools

nums = [47,11,42,13]
result = reduce(lambda x, y: x + y, nums)
print(result)

#Resultado:
113


Para entender un poco mejor al operador reduce, veamos una imagen que nos explica su procedimiento.


Veranschulichung von Reduce 

 Como pueden ver, reduce suma cada uno de los elementos hasta solo dejar un valor, en este caso "113", ¿Que pasaría si en vez de sumar, multiplicamos cada uno de los valores?, buena pregunta, espero y puedas contestarla en los comentarios.

La programación funcional no solo se resume en estos 4 operadores, en articulo posteriores explicare más acerca de todo esto. Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes. :D 
 
 
Seguir Leyendo

jueves, 12 de octubre de 2017

Algoritmos de Búsqueda en Python

Introducción:

Problema de la Búsqueda: Dada una lista xn y un valor x devolver el índice de x en xn si x está en xn, y −1 si x no está en xn.

El problema que acabo de presentarte, es uno de los problemas más clásicos de la computación, "El Problema de la Búsqueda", nuestro objetivo de hoy, será escribir 3 algoritmos diferentes que nos ayuden a resolver este problema, si te interesa sigue leyendo.

Algoritmos de Búsqueda:

Con mucha frecuencia los programadores trabajamos con grandes cantidades de datos almacenados en una lista o en cualquier estructura de datos, y por ello será necesario determinar si una lista contiene un valor que coincida con un cierto valor clave, para saber si un valor se encuentra dentro de una determinada lista o vector (depende de ti como quieras llamarlo), se hace uso de los Algoritmos de Búsqueda, los cuales nos permiten encontrar un determinada valor dentro de una estructura de datos: por ejemplo, ubicar el registro correspondiente a cierta persona en una base de datos.

Para cumplir con el objetivo de hoy que es resolver el Problema de Búsqueda, usaremos dos técnicas de búsqueda: búsqueda lineal o secuencial,la técnica más sencilla, y búsqueda binaria o dicotómica, la técnica más eficiente.
Resultado de imagen para algoritmos de busqueda


1. Búsqueda Lineal:

-Este tipo de algoritmo, como su nombre indica, busca desde el primer dato hasta el último, uno a uno comparando sucesivamente todos los datos en memoria hasta localizar el dato que queramos localizar. Este algoritmo puede usarse en cualquier situación, pero se recomienda usarlo solo en listas que no estén ordenadas, ya que para las que lo estén podremos usar el siguiente algoritmo, que es mucho más eficiente.

Solución del Problema con la Búsqueda Lineal:

Problema de la Búsqueda: Dada una lista xn y un valor x devolver el índice de x en xn si x está en xn, y −1 si x no está en xn.
Diseñamos una solución: Podemos comparar uno a uno los elementos de la lista con el valor de x, y retornar el valor de la posición donde lo encontramos en caso de encontrarlo.
Si llegamos al final de la lista sin haber salido antes de la función es porque el valor de x no
está en la lista, y en ese caso retornamos −1.
En esta solución necesitamos una variable i que cuente en cada momento en qué posición
de la lista estamos parados. Esta variable se inicializa en 0 antes de entrar en el ciclo y se
incrementa en 1 en cada paso.

Código del Algoritmo:



""" Búsqueda lineal.
 Si x está en lista devuelve su posición en lista, de lo
 contrario devuelve -1.
"""

#Función del Algoritmo: se recorren uno a uno los elementos de la lista 
#y se los compara con el valor x buscado.
def busqueda_lineal(lista, x):
  i = 0 # i tiene la posición actual en la lista, comienza en 0

 #El ciclo recorre todos los elementos de la lista
 for z in lista:
  
  #Si z es igual a x, devuelve el valor de i
  if z == x:
   return i
  i = i+1
 #si salió del ciclo sin haber encontrado el valor, devuelve -1
 return -1

Resultado:
>>> busqueda_lineal([1, 4, 54, 3, 0, 34, 23, 12], 2)
-1
>>> busqueda_lineal([1, 4, 54, 3, 0, 34, 23, 12], 23)
6
>>> busqueda_lineal([1, 4, 54, 3, 0, 34, 23, 12], 4)
1



2. Búsqueda Binaria:

En este caso, este tipo de búsqueda es usado en listas que estén previamente ordenadas, ya que su método de búsqueda es la de dividir los datos en dos grupos, eligiendo el grupo en el cual debería estar el dato buscado (supone que está ordenado alfabéticamente o numericamente), volviendo a aplicar la división, y así sucesivamente hasta verificar si existe o no existe el dato buscado.

Solución del Problema con la Búsqueda Binaria:

Problema de la Búsqueda: Dada una lista xn y un valor x devolver el índice de x en xn si x está en xn, y −1 si x no está en xn.
Procedimiento: Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del vector (normalmente el elemento central): si el valor de éste es mayor que el del elemento buscado se repite el procedimiento en la parte del vector que va desde el inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del vector que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en todo el vector.

Código del Algoritmo:

"""
Búsqueda Binaria.
"""

#Este es el vector que el algoritmo usara para buscar cualquier dato
vector = [3, 5, 8, 9, 10, 22, 45, 500, 900, 4253]

#La variable puntero sera el inicio del vector, que es 0
puntero = 0

#vectorLen contiene la longitud del vector
vectorLen = len(vector)

#La varieable encontrado cambiara su valor, y asi el algoritmo sabre que hacer 
encontrado = False

#Le pedimos al usuario una entrada de un entero
numero = int(input("Ingresar el dato que desea buscar: "))

#Creamos un bucle que no se detenga hasta que encontrado sea diferente de False
#Y que puntero sea menor o igual que vectorLen
while not(encontrado) and puntero <= vectorLen:

 #Creamos la variable mitad
 mitad = int((puntero+vectorLen) / 2)

 #Si numero es igual que el indice mitad en vector
 if numero == vector[mitad]:
  #Encontado sera igual a True
  encontrado = True
 
 elif numero < vector[mitad]:
  #vectorLen sera igual que mitad - 1
  vectorLen = mitad - 1
 #De lo contrario
 else:
  #Puntero sera igual que mitad + 1
  puntero = mitad + 1

#Si encontrado es True
if(encontrado):

#Mostramos un mensaje con la posicion del Dato en el vector
 print("El dato se encuentra en la posición ", str(mitad+1))

 #Mostramos el vector ordenado
 print(vector)

#De lo contrario
else:
        #Mostramos un mensaje 
 print("El dato no se encontró")

Resultado:
Ingresar el dato que desea buscar: 8
El dato se encuentra en la posición  3
[3, 5, 8, 9, 10, 22, 45, 500, 900, 4253]


¡Excelente! hemos cumplido con nuestro objetivo, resolvimos el problema de la búsqueda con 2 algoritmos diferentes, como pueden ver, los algoritmos de búsqueda aparte de ser muy interesantes son de mucha ayuda, espero que te haya sido de utilidad, ya sea para resolver problemas o para reforzar tus conocimientos.

Comparte tu experiencia con nosotros dejando un buen comentario. Mi nombre es Luis, y fue un placer compartir mis conocimientos con ustedes :D. 
Seguir Leyendo

martes, 10 de octubre de 2017

Servicio Web de la NASA - Astronomy Picture of the Day (imagen astronómica del día, APOD)

Introducción:

Hoy en día podemos encontrar una gran cantidad de servicios web o APIs en toda Internet, muchas empresas importantes nos permiten acceder a sus cientos de datos, con el fin de que nosotros los desarrolladores podamos usarlos.

Hoy usaremos el servicio de la NASA , "Imagen Astronómica Del Día", también conocido por sus siglas en ingles como "APOD".


APOD es un servicio que nos provee una imagen astronómica diaria, ademas de la imagen, nos proporciona una breve descripción de esta, pero hoy nos centraremos en la imagen.

En el día de hoy crearemos un pequeño programa con el lenguaje de programación Python y haremos uso de la librería requests para hacer la petición a los servidores de la NASA. Si aun no tienes la librería requests, puedes descargarla ingresando al siguiente enlace: Descargar Liberia Requests

El programa que crearemos, le pedirá una entrada al usuario, la cual sera la fecha de la imagen que desea, luego de esto el programa buscara la imagen y luego la descargara en nuestro ordenador.

Proyecto ApodPy

Al programa de hoy lo e bautizado como "Proyecto ApodPy", no es un buen nombre pero solo es una prueba.


A continuación te enseñare el código de nuestro programa:


#Importamos la librería Requests para hacer peticiones a servidores
import requests
import webbrowser

#Le pedimos al usuario que introduzca una fecha con el formato Año-Mes-Día
date = input("introduzca una fecha con el formato Año-Mes-Día (Ej: 2008-04-05): ")

#Parámetros que le pasaremos a la petición
params = {'api_key':'DEMO_KEY',
   #Date es la fecha de la imagen que nos devolverá el servidor la cual descargaremos
   'date': date}
print("Obteniendo imagen astronomica de la fecha ", params['date'])

#Creamos una conexión con los servidores de la NASA
response = requests.get('https://api.nasa.gov/planetary/apod?', params=params)

#Obtenemos la respuesta del servidor en un formato json
responseJSON = response.json()

#En ocasiones en vez de darnos una imagen nos dan un vídeo
#Por ello comprobaremos que la respuesta sea una imagen
#Si la respuesta no es una imagen se nos abrirá una pestaña en nuestro navegador con el link del vídeo
if responseJSON['media_type'] == "image":
 #Enviamos una petición a la url que nos devuelve https://api.nasa.gov/planetary/apod?
 responseIMG = requests.get(responseJSON['url'])

 #Luego iteramos la respuesta y le escribimos en un fichero de formato jpg con escritura Binaria
 with open('apod-'+params['date']+'.jpg', 'wb') as img:
  for x in responseIMG.iter_content():
   img.write(x)
  print("\n Imagen apod-"+params['date']+".jpg descargado correctamente.")
  img.close()

#Como ya mencione si la respuesta no es una imagen se abrirá una pestaña en nuestro navegado con el video
#Si quieres puedes hacer lo mismo que lo de la imagen, descargar el vídeo, simplemente repite el procedimiento de arriba
else:
 webbrowser.opne_new_tab(responseJSON['url'])

El código es corto y fácil de entender, se ve algo cargado pero es por los comentarios, si quieres verlo mejor, puedes verlo en mi repositorio de GitHub: Proyecto ApodPy.py.

Lo primero que hace el programa es importar los modulo necesarios que en este caso son requests y webbrowser. Luego de esto pedimos una entrada la cual sera fecha de la imagen que deseamos obtener, esta fecha la guardamos en una variable con el identificador date. Luego declaramos una variable con el identificador params,esta variable almacenara un diccionario con dos elementos, estos 2 elementos serán los parámetros de nuestra petición, el primero sera api_key, al cual le daremos el valor de DEMO_KEY, el segundo seria la fecha de la imagen que deseamos obtener. Luego hacemos la petición a "https://api.nasa.gov/planetary/apod?", aquí mismo le decimos que los parámetros serán los elementos del diccionario params. Luego declaramos una variable con el identificador responseJSON, la cual almacenara la respuesta dada por el servidor en formato JSON. Luego de todo esto empezamos con el proceso de extraer la URL de la imagen y almacenarla en el directorio actual en donde se ejecuta el programa.

Antes de ejecutar el programa, quiero advertirles que el servicio nos permite usar la clave "DEMO_KEY" para probar la API antes de tener que registrarnos para una clave real, "DEMO_KEY" tiene bastantes limitaciones: no más de 30 peticiones por hora y un máximo de 50 por día, por lo tanto, si tienes planeado hacer más de 50 peticiones por día. ya sea que quieres hacer un proyecto comercial, te recomiendo conseguir una "API_KEY", la cual puedes conseguir registrándote en el siguiente enlace: Get Your API Key.


Resultado del Proyecto ApodPy:

Momento de ejecutar nuestro "Proyecto ApodPy", al ejecutar, nos deberia aparecer algo como esto:


Yo colocare la fecha de hoy, la cual es "2017-10-10". Quiero dejar en claro en que podemos colocar cualquier fecha, aparir de la primera publicación el 16 de junio de 1995 hasta la fecha actual.

Luego de introducir la fecha, el programa empezara a hacer la petición y posteriormente, descargar la imagen el en directorio actual del programa.


Ese seria el resultado, la imagen se descargo correctamente, y la podemos ver en el directorio, a continuación te muestro la imagen que el programa descargo por mi:


Hermoso ¿Verdad?.

Si tienes ganas de saber más acerca de este servicio, y conocer otros servicios web de la NASA, te sugiero que visites el sitio oficial de NASA Open APIs.

Eso a sido todo de mi parte por el dia de hoy, si quedaste con alguna duda, déjamela saber en los comentarios, comparte tu experiencia de este "Proyecto ApodPy" con nosotros. Mi nombre es Luis, y fue un placer compartir mis conocimientos con ustedes :D.
Seguir Leyendo

lunes, 9 de octubre de 2017

Análisis del formato JSON con Python

JavaScript Object Notation - JSON


El formato JSON se inspiro en el formato de objetos y arrays que se usa en el lenguaje JavaScript. Pero como Python se invento antes que JavaScript, la sintaxis usada en Python para los diccionarios y listas influyeron la sintaxis de JSON.
De modo que el formato del JSON es casi idéntico a la combinación de listas y ´
diccionarios de Python.


Resultado de imagen para json imagenes

Todos sabemos como luce un objeto JSON, a continuación te doy un ejemplo:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Pkwy",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}
El anterior JSON es de un articulo que escribí en este blog,el cual es Servicio web de geocodificación de Google Maps, ¿Como podrías extraer simplemente una parte de información de este JSON?, hoy te enseñara a analizar y poder extraer atributos de objetos JSON con ayuda de Python y el modulo json. Listos, pues comenzamos.

 Análisis de JSON con Python:


El JSON se construye anidando diccionarios (objetos) y listas segun se necesite.

En este ejemplo, vamos a representar una lista de usuarios en la cual cada usuario es un conjunto de parejas clave-valor (es decir, un diccionario). De modo que tendremos una lista de diccionarios.


Para el ejemplo de hoy usaremos la librería integrada json para analizar el

JSON y leer los datos.


A continuación te mostrare el código del ejemplo, luego lo explicare.

import json

users = '''
[
{ "id" : "001",
"edad" : "21",
"nombre" : "Luis"
},
{ "id" : "002",
"edad" : "25",
"nombre" : "Andres"
},
{ "id" : "003",
"edad" : "34",
"nombre" : "Jose"
},
{ "id" : "004",
"edad" : "29",
"nombre" : "Jesus"
}
]'''

info = json.loads(users)
print('Cantidad de usuarios:', len(info))
for elemento in info:
    print('Nombre', elemento['nombre'])
    print('Id', elemento['id'])
    print('Edad', elemento['edad'])
    print("\n")


Antes de ejecutar nuestro programa, veamos como funciona.

Como pueden ver, lo primero que hacemos es importar el modulo json, luego definimos una variable con el identificador "users" la cual almacenara una lista con nuestros objetos JSON.

Luego de esto hacemos uso del metodo "loads" del modulo "json",  lo que obtenemos de json.loads() es una lista de Python que recorreremos con un bucle for, y cada elemento dentro de esa lista es un diccionario de Python. Una vez analizado el JSON, podemos usar el operador indice de Python para extraer los distintos fragmentos de datos de cada usuario. No tenemos que usar la librería JSON para rebuscar a través del JSON analizado, ya que los datos devueltos son sencillamente estructuras nativas de Python.

Al momento de ejecutar nuestro programa el resultado debería quedarnos algo así:


Como pueden ver el programa nos informa de cuantos usuarios existen, esto lo logra contando los objetos que existen, luego recorremos todos los elementos de cada objeto y lo mostramos en pantalla.

No te limites a no agregar más objetos, experimenta con este código y cuéntanos en los comentarios como te fue :D.

Mucha parte de la información que les e proporcionado en este articulo, es del libro "Python para informáticos" escrito por Charles Severance, un libro muy bueno, se los recomiendo :D.

Seguir Leyendo

Entradas más recientes

Powered by Blogger .