Se non si desidera effettivamente il caricare il file, andare su questo con json
non è proprio l'approccio giusto. È possibile utilizzare un file mappato in memoria ... e non caricare mai effettivamente il file in memoria: un array memmap
può aprire il file e creare un array "su disco" senza caricare nulla nella memoria.
Creare un array di memoria mappata di dicts:
>>> import numpy as np
>>> a = np.memmap('mydict.dat', dtype=object, mode='w+', shape=(4,))
>>> a[0] = {'name':"Joe", 'data':[1,2,3,4]}
>>> a[1] = {'name':"Guido", 'data':[1,3,3,5]}
>>> a[2] = {'name':"Fernando", 'data':[4,2,6,9]}
>>> a[3] = {'name':"Jill", 'data':[9,1,9,0]}
>>> a.flush()
>>> del a
Ora leggere la matrice, senza caricare il file:
>>> a = np.memmap('mydict.dat', dtype=object, mode='r')
Il contenuto del file vengono caricati in memoria quando la lista è creato, ma non è necessario - puoi lavorare con l'array su disco senza caricarlo.
>>> a.tolist()
[{'data': [1, 2, 3, 4], 'name': 'Joe'}, {'data': [1, 3, 3, 5], 'name': 'Guido'}, {'data': [4, 2, 6, 9], 'name': 'Fernando'}, {'data': [9, 1, 9, 0], 'name': 'Jill'}]
Si prende una quantità trascurabile di tempo (ad esempio nanosecondi) per creare una matrice di memoria mappata che può indicizzare un file indipendentemente dalle dimensioni (ad esempio 100 GB) del file.
Cosa intendete per "senza caricarlo"? – user2357112
Bene, un modo è quello di caricare il file nella memoria, aggiungere la nuova lista ad esso e scaricare il risultato sul disco. È possibile scrivere semplicemente il nuovo elenco sul disco, aggiungendolo alla fine del file senza caricare il file nella memoria? – jazzblue
Questo potrebbe essere utile: http://stackoverflow.com/questions/12460943/merging-pre-sorted-files-without-reading-everything-into-memory Caricare la nuova dict in un nuovo file, e quindi unire i due file forse? –