将字典保存到文件(numpy和Python 2/3友好)

Gus*_*son 13 python numpy hdf5 pytables python-3.x

我想在Python中进行分层键值存储,这基本上归结为将字典存储到文件中.我指的是任何类型的字典结构,可能包含其他字典,numpy数组,可序列化的Python对象等等.不仅如此,我希望它存储空间优化的numpy数组,并在Python 2和3之间发挥很好的作用.

以下是我所知道的方法.我的问题是这个清单中缺少什么,是否有一个替代方案可以躲过我所有的交易破坏者?

  • Python的pickle模块(交易破坏者:大量膨胀numpy数组的大小)
  • NumPy的的save/ savez/ load(致命弱点:不同的Python 2/3格式不兼容)
  • 替换numpy.savez的PyTables(交易破坏者:只处理numpy数组)
  • 手动使用PyTables(交易破坏者:我希望这可以不断更改研究代码,因此通过调用单个函数将字典转储到文件非常方便)

PyTables的替代numpy.savez是有希望的,因为我喜欢使用hdf5的想法,它真的有效地压缩numpy数组,这是一个很大的优点.但是,它不需要任何类型的字典结构.

最近,我一直在做的是使用类似于PyTables替换的东西,但增强它以便能够存储任何类型的条目.这实际上工作得很好,但我发现自己在长度为1的CArrays中存储原始数据类型,这有点尴尬(并且对于实际的长度为1的数组来说是模棱两可的),即使我设置chunksize为1因此它不会占用很多空间.

那里有类似的东西吗?

谢谢!

Gus*_*son 4

两年前提出这个问题后,我开始编写自己的基于 HDF5 的 pickle/ 替代品np.save。从那时起,它已经成熟为一个稳定的包,所以我想我最终会回答并接受我自己的问题,因为它的设计正是我正在寻找的: