Я хочу использовать иерархическое хранилище ключей в Python, которое в основном сводится к хранению словарей в файлах. Под этим я подразумеваю любой тип словарной структуры, который может содержать другие словари, массивы numpy, сериализуемые объекты Python и т.д. Не только это, я хочу, чтобы он хранил массивы numpy, оптимизированные по пространству, и хорошо играл между Python 2 и 3.
Ниже приведены методы, которые я знаю. Мой вопрос в том, что отсутствует в этом списке, и есть ли альтернатива, которая уклоняется от всех моих разрывов?
- Модуль Python
pickle
(разблокировка транзакций: многократно увеличивает размер массивов numpy) - Numpy
save
/savez
/load
(разблокировка сделки: Несовместимый формат через Python 2/3) - Замена PyTables для numpy.savez (разблокирование транзакций: обрабатывает только массивы numpy)
- Использование PyTables вручную (разблокирование транзакций: я хочу это для постоянного изменения кода исследования, поэтому очень удобно иметь возможность выгружать словари в файлы, вызывая одну функцию)
Замена PTTables numpy.savez
является многообещающей, поскольку мне нравится идея использования hdf5 и она эффективно сжимает массивы numpy, что является большим плюсом. Однако он не требует какой-либо структуры словаря.
В последнее время то, что я делал, это использовать что-то похожее на замену PyTables, но улучшая его, чтобы хранить записи любого типа. Это действительно работает очень хорошо, но я нахожу, что храню примитивные типы данных в CA-образцах длины-1, что немного неудобно (и неоднозначно для массивов с длиной-1), хотя я установил chunksize
в 1, поэтому он не занимать столько места.
Есть ли что-то подобное уже там?
Спасибо!