Contenido

Cómo guardar información en un registro en Python

Sobre los formatos, un poco sobre el diario y un ejemplo de código Python

Supongamos que necesita guardar alguna información sobre un evento y cuándo ocurrió en un archivo de registro. Uno de los formatos de archivo más apropiados para esto es JSON.

Qué es JSON

JSON (JavaScript Object Notation) es un formato ligero que se utiliza en todas partes para intercambiar datos. Se basa en un subconjunto del lenguaje JavaScript (la forma en que JavaScript construye objetos). Como se indica en MDN, algunos JavaScript no son JSON, y algunos JSON no son JavaScript.

Un ejemplo en el que este formato se utiliza mucho es en las respuestas de los servicios web. En los “viejos” tiempos, los servicios web utilizaban XML como formato principal para transferir datos, pero desde que apareció JSON (el formato JSON está definido en RFC 4627 por Douglas Crockford), se ha convertido en el formato preferido porque es mucho más ligero.

Puedes encontrar mucha más información en el sitio web oficial de JSON y en esta excelente respuesta en StackOverflow.

Función de registro

Aquí tenemos una función de ejemplo para guardar información en un diario en Python. La llamaremos en el momento de un evento, y guardará toda la información necesaria en el registro.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def write_to_log(file_object, event_name, description, value):
    """Write message to a log file"""
    event_time = str(datetime.datetime.now())
    data = OrderedDict()
    data['time'] = event_time
    data['event'] = event_name
    data['details'] = description
    data['value'] = value
    json.dump(data, file_object, separators=(', ', ':'))
    file_object.write('\n')

Ejemplo de uso

En primer lugar, tenemos que abrir el archivo de registro para añadirle información. Utilizaremos el modo de aumento del archivo de registro y para ello utilizaremos la casilla “a” - append.

1
LOG = open("log.txt", "a", encoding='utf-8')

A continuación, registramos la información sobre el evento en el registro:

1
2
3
4
5
for i in range(5):
    EVENT_NAME = 'EVENT_' + str(i)
    WHAT_HAPPENED = 'HAPPENED_' + str(i)
    SOME_VALUE = i
    write_to_log(LOG, EVENT_NAME, WHAT_HAPPENED, SOME_VALUE)

Esto creará un archivo de registro con un buen formato:

1
2
3
4
5
{"time":"2019-11-03 13:38:56.822216", "event":"EVENT_0", "details":"HAPPENED_0", "value":0}
{"time":"2019-11-03 13:38:56.822317", "event":"EVENT_1", "details":"HAPPENED_1", "value":1}
{"time":"2019-11-03 13:38:56.822369", "event":"EVENT_2", "details":"HAPPENED_2", "value":2}
{"time":"2019-11-03 13:38:56.822410", "event":"EVENT_3", "details":"HAPPENED_3", "value":3}
{"time":"2019-11-03 13:38:56.822449", "event":"EVENT_4", "details":"HAPPENED_4", "value":4}

Espero que esto te ayude.