Jeśli szukasz nie faktycznie załadować plik, dzieje się to z json
nie jest tak naprawdę właściwym podejściem. Możesz użyć pliku odwzorowanego w pamięci ... i nigdy nie ładować pliku do pamięci - tablica memmap
może otworzyć plik i zbudować tablicę "na dysku" bez ładowania czegokolwiek do pamięci.
Utwórz macierz pamięci odwzorowany z 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
teraz czytać tablicę bez ładowania pliku:
>>> a = np.memmap('mydict.dat', dtype=object, mode='r')
zawartość pliku są ładowane do pamięci, gdy lista jest utworzone, ale to nie jest wymagane - możesz pracować z tablicą na dysku bez jej ładowania.
>>> 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'}]
trwa pomijalny okres czasu (na przykład nanosekund) w celu utworzenia tablicy w pamięci, które może indeksować plik bez względu na wielkość (na przykład 100 GB) pliku.
Co rozumiesz przez "bez ładowania"? – user2357112
Jednym ze sposobów jest załadowanie pliku do pamięci, dodanie do niego nowej listy i zrzucenie wyniku z powrotem na dysk. Czy można po prostu zapisać nową listę na dysku, dołączając ją do końca pliku bez wczytywania pliku do pamięci? – jazzblue
Może to być przydatne: http://stackoverflow.com/questions/12460943/merging-pre-sorted-files-without-reading-everything-into-memory Załaduj nowy plik dict do nowego pliku, a następnie scal go może dwa pliki? –