Как отметил @Alex Hall в комментарии, sys.getsizeof()
не имеет никакого отношения к размеру данных, помещаемых в файл pickle
.Чтобы определить, что вам нужно / вы хотите знать, вы можете временно сохранить маринованные данные в строку, которую вы можете измерить, а затем вручную записать их в файл.
В вашем вопросе нет кода, который воспроизводитпроблема.Но вот простой пример кода, который показывает, как выбрать элементы в словаре и создать индекс, который можно использовать позже - вместе с seek()
- для случайного считывания любого элемента, который был в нем.(Если, конечно, это ваша конечная цель.)
import random
import pickle
uncompressed_dic = {'a': 1, 'b': (2, 3, 4), 'c': 'text'} # Sample data.
with open('UCIndex.txt', 'wb') as f:
UncompressedLookup = {}
offset = 0
for key, value in uncompressed_dic.items():
pkldata = pickle.dumps(value)
size = len(pkldata)
UncompressedLookup[key] = {'offset': offset, 'size': size}
f.write(pkldata)
offset += size
# Read items back in random order using UncompressedLookup dict.
keys = list(uncompressed_dic.keys())
random.shuffle(keys)
i = 0
while keys:
if i >= 5:
break
key = keys.pop()
offset = UncompressedLookup[key]['offset']
size = UncompressedLookup[key]['size']
with open('UCIndex.txt', 'rb') as f:
f.seek(offset)
pkldata = f.read(size)
value = pickle.loads(pkldata)
print((key, value))
Пример вывода:
('b', (2, 3, 4))
('c', 'text')
('a', 1)