Curso de programación de criptomonedas con Python - 10. Crear un bot recopilador de grandes cantidades de datos (parte 3/5)

in #spanish8 years ago (edited)

En esta ocasión vamos a continuar con el desarrollo de nuestro bot creando la función que guardará los datos en 2 bases de datos, una diaria y otra mensual. Ya hemos llegado a la mitad de su construcción, así que muy pronto lo tendremos operando, ¡manos a la obra!

Con la nueva función que vamos a implementar aprenderemos sobre crear archivos con Python y escribir sobre ellos, a trabajar con fechas con la librería datetime y la diferencia entre variables locales y globales. Nuestro objetivo es crear automáticamente un archivo con el nombre del día de hoy (por ejemplo, la entrada en la base que he recogido esta mañana se llama '30_10_2016.txt') y escribirle la información que recopilamos en la lección anterior.

Vamos a comenzar creando una carpeta dentro de la carpeta de nuestro proyecto, con el nombre de 'base_datos'. Dentro de esta carpeta creamos dos carpetas más llamadas 'diaria' y 'mensual'. Luego vamos a importar la librería datetime. La añadimos en nuestra línea de importaciones, para que quede así:

import ast, json, datetime

Entonces nos lanzamos al código. Lo pongo entero y luego vamos comentándolo paso a paso:

x = datetime.datetime.now()
def post_base_datos(numero, tipo): #El tipo puede ser 'mes' o 'dia', ¡no es igual al tipo en la función get_info()!
    if tipo == "dia":
        contenido = [get_info(numero, "diaria"), identificador()]
        nombre_arch = str(x.day)  + '_' + str(x.month) + '_' + str(x.year)
        guardar = "diaria/"
    elif tipo == "mes":
        contenido = get_datos_global()
        nombre_arch = str(x.month) + '_' + str(x.year)
        guardar = "mensual/"
    arch = open('¡Aqui la ruta de tu base de datos!' + guardar + str(nombre_arch) + '.txt', 'a')
    arch.write(str(contenido))
    arch.close()

Variables locales y variables globales

Con la primera línea vamos a comprender cómo trabajan las variables en Python. Si yo escribo una variable dentro de una función, esta variable sólo funcionará cuando llame a la función, es decir, si yo escribo esto...

def prueba():
    variable_local = 1

print variable_local

...me va a dar error. Las variables locales son las variables definidas dentro de una función, no se pueden llamar desde fuera. Sin embargo, si yo escribo esto...

variable_global = 1
def prueba():
    print variable_global

...va a funcionar perfectamente.

Fechas en Python

En la primera línea de nuestro código tenemos una variable global: x = datetime.datetime.now()
Esto significa que yo asigno a la variable x la fecha actual. Vamos a necesitarla para no alargar más el código dentro de la función.

Luego decimos al intérprete: "oye Python, si 'tipo' es 'dia' crea 3 variables locales".
La primera se llamará 'contenido' y será una lista con dos elementos, el primero será el diccionario que nos devuelve la función get_info(), que creamos en el capítulo anterior, y el segundo será la función que crearemos en el próximo capítulo."
Esta servirá para dotar a cada entrada de la base de datos de un número que la identificará, muy útil para consultar por rango de días, por poner un ejemplo. Ya lo veremos más adelante.

La segunda variable se llama nombre_arch. Hace referencia a una cadena de texto, formada por 3 cadenas de texto, una para el día, otra para el mes y otra para el año, separadas por dos _. Las llamadas se hacen mediante la librería datetime, que la asignamos antes a x como variable global. Más sobre cómo funciona la libreria datetime aquí.

La tercera se llama 'guardar' y hará referencia a la carpeta donde guardamos el archivo. Más abajo entenderás para que la usaremos.

Luego le decimos a Python que si el tipo es 'mensual' se ejecute la otra parte de la condicional, muy parecida a la primera. Si se ejecuta esta parte, las variables locales 'contenido', 'nombre_arch' y 'guardar' tendrán otra información.

Creación y escritura de ficheros

Para terminar, vamos a analizar detalladamente las 3 últimas líneas del código. La primera es esta:

arch = open('¡Aquí la ruta de tu base de datos!' + guardar + str(nombre_arch) + '.txt', 'a')

Aquí creamos una variable llamada 'arch'. En ella vamos a llamar al método open(), que es una función de la librería estándar de Python para abrir archivos. Esta función pide 2 parámetros: el primero es una ruta donde se encontrará el fichero que queremos crear (por ejemplo: C:/.../.../.../base_datos/) colocada entre comillas y el segundo es el modo de abrir el archivo, que será una letra, en este caso 'a'. Más información sobre esto aquí.

Las cadenas de texto de las variables guardar, str(nombre_arch) y .txt configurarán el resto de la ruta.

arch.write(str(contenido))
arch.close()

En la primera línea usamos el método write sobre el archivo que hemos abierto para escribir sobre él nuestro contenido. La última línea cierra el archivo. Más información sobre métodos de trabajo sobre archivos aquí. Hay formas de ahorrarse la última línea, pero lo vamos a hacer así para ir familiarizándonos con cerrar archivos después de operar sobre ellos.

Ya tenemos el imprimidor del contenido sobre nuestra base de datos. En el siguiente tutorial agregaremos un identificador a cada entrada que nos será muy útil para trabajar con los datos. ¡Hasta la próxima!


Índice del curso:

1. Presentación
2. Cómo empezar: llamadas a APIs
3. Envolturas
4. Recopilar datos uno a uno: diccionarios
5. Recopilar datos uno a uno: listas
6. Funciones. Crear un bot informador de STEEM (parte 1/2)
7. Crear un bot informador de STEEM (parte 2/2)
8. Crear un bot recopilador de grandes cantidades de datos (parte 1/5)
9. Crear un bot recopilador de grandes cantidades de datos (parte 2/5)

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.032
BTC 61562.85
ETH 2891.34
USDT 1.00
SBD 3.43