objeto limpiar libreria instalar ejemplo dinamico dict create crear convertir python json file-io compression zlib

limpiar - ¿Comprueba Python una serie de objetos JSON mientras mantiene la lectura en serie?



python json ejemplo (2)

Simplemente use un objeto gzip.GzipFile() y trátelo como un archivo normal; escriba objetos JSON línea por línea y léalos línea por línea.

El objeto se encarga de la compresión de forma transparente, y guarda las lecturas, descomprimiendo los portabrocas según sea necesario.

import gzip import json # writing with gzip.GzipFile(jsonfilename, ''w'') as outfile: for obj in objects: outfile.write(json.dumps(obj) + ''/n'') # reading with gzip.GzipFile(jsonfilename, ''r'') as isfile: for line in infile: obj = json.loads(line) # process obj

Esto tiene la ventaja adicional de que el algoritmo de compresión puede hacer uso de la repetición a través de los objetos para las relaciones de compresión.

Tengo un montón de objetos json que necesito comprimir porque está consumiendo demasiado espacio en disco, aproximadamente 20 gigs valen para algunos millones de ellos.

Idealmente, lo que me gustaría hacer es comprimirlos individualmente y luego cuando necesite leerlos, cargue y descomprima cada uno de forma iterativa. Intenté hacer esto creando un archivo de texto con cada línea siendo un objeto json comprimido a través de zlib , pero esto está fallando con una

decompress error due to a truncated stream

que creo que se debe a las cadenas comprimidas que contienen nuevas líneas.

Alguien sabe de un buen método para hacer esto?


Es posible que desee probar un analizador json incremental, como jsaone .

Es decir, crea un JSON único con todos tus objetos y analízalo como

with gzip.GzipFile(file_path, ''r'') as f_in: for key, val in jsaone.load(f_in): ...

Esto es bastante similar a la respuesta de Martin, perdiendo un poco más de espacio, pero tal vez un poco más cómodo.

EDITAR: oh, por cierto, es probable que aclare que escribió jsaone.