Поскольку вы упомянули о необходимости сжимаемости, я бы предложил использовать pickle
с модулем gzip
для сжатия выходных данных. Вы можете писать и читать свои списки по одному за раз, вот пример того, как:
import gzip, pickle
output = gzip.open('pickled.gz', 'wb', compresslevel=9)
for x in range(10):
output.write(pickle.dumps(range(10)) + '\n\n')
output.close()
А затем используйте генератор, чтобы вернуть списки по одному:
def unpickler(input):
partial = []
for line in input:
partial.append(line)
if line == '\n':
obj = ''.join(partial)
partial = []
yield pickle.loads(obj)
input = gzip.open('pickled.gz', 'rb')
for l in unpickler(input):
print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]