当前位置:  开发笔记 > 编程语言 > 正文

在python中基本类型的轻量级泡菜?

如何解决《在python中基本类型的轻量级泡菜?》经验,为你挑选了4个好方法。

我想要做的就是序列化和反序列化字符串或整数元组.

我查看了pickle.dumps(),但字节开销很大.基本上它看起来占用了大约4倍的空间.此外,我需要的只是基本类型,不需要序列化对象.

marshal在空间方面稍好一些,但结果却充满了令人讨厌的\ x00字节.理想情况下,我希望结果是人类可读的.

我想过只使用repr()和eval(),但是有一种简单的方法可以在不使用eval()的情况下实现这一点吗?

这将存储在数据库中,而不是文件中.字节开销很重要,因为它可以在需要TEXT列和varchar之间产生差异,通常数据紧凑性会影响db性能的所有区域.



1> gimel..:

看一下json,至少生成的dumps是可读的许多其他语言.

JSON(JavaScript Object Notation)http://json.org是用作轻量级数据交换格式的JavaScript语法(ECMA-262第3版)的子集.



2> Autoplectic..:

我个人会用yaml.它与json的编码大小相同,但它可以在必要时代表一些更复杂的东西(例如类,递归结构).

In [1]: import yaml
In [2]: x = [1, 2, 3, 'pants']
In [3]: print(yaml.dump(x))
[1, 2, 3, pants]

In [4]: y = yaml.load('[1, 2, 3, pants]')
In [5]: y
Out[5]: [1, 2, 3, 'pants']



3> Torsten Mare..:

也许你没有使用正确的协议:

>>> import pickle
>>> a = range(1, 100)
>>> len(pickle.dumps(a))
492
>>> len(pickle.dumps(a, pickle.HIGHEST_PROTOCOL))
206

请参阅pickle数据格式的文档.



4> user41767..:

如果您需要节省空间的解决方案,可以使用Google协议缓冲区.

协议缓冲区 - 编码

协议缓冲区 - Python教程

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有