python中基本类型的轻量级pickle?
我所要做的就是序列化和取消序列化字符串或整数的元组 我查看了pickle.dumps(),但字节开销很大。基本上,它看起来需要占用4倍的空间。此外,我只需要基本类型,不需要序列化对象 封送处理在空间方面稍微好一点,但结果充满了令人讨厌的\x00字节。理想情况下,我希望结果是人类可读的 我曾想过只使用repr()和eval(),但有没有一种不使用eval()就能实现这一点的简单方法python中基本类型的轻量级pickle?,python,serialization,pickle,Python,Serialization,Pickle,我所要做的就是序列化和取消序列化字符串或整数的元组 我查看了pickle.dumps(),但字节开销很大。基本上,它看起来需要占用4倍的空间。此外,我只需要基本类型,不需要序列化对象 封送处理在空间方面稍微好一点,但结果充满了令人讨厌的\x00字节。理想情况下,我希望结果是人类可读的 我曾想过只使用repr()和eval(),但有没有一种不使用eval()就能实现这一点的简单方法 这将存储在数据库中,而不是文件中。字节开销很重要,因为它可能会在需要文本列和varchar之间产生差异,并且通常数据
这将存储在数据库中,而不是文件中。字节开销很重要,因为它可能会在需要文本列和varchar之间产生差异,并且通常数据紧凑性会影响数据库性能的所有方面。中提到了一些持久性内置项,但我不认为它们中的任何一个在生成的文件大小上都会显著减小 您可以一直使用,但在那里您只能得到字符串、int、float、bool。字节开销很大 为什么这很重要?它起作用了。如果你的磁盘空间不够,我很乐意以500美元卖给你1Tb 你开过吗?性能是个问题吗?你能证明序列化的性能是问题所在吗 “我曾想过只使用repr()和eval(),但有没有一种不使用eval()就能实现这一点的简单方法?” 没有比repr和eval更简单的了 eval怎么了 是否存在“有人可能在我序列化列表的文件中插入恶意代码”问题 具体来说,谁将查找并编辑此文件以放入恶意代码?您为保护此安全所做的任何操作(即加密)都会从中删除“简单” 看看,至少生成的
转储可以用许多其他语言读取
JSON(JavaScript对象表示法)是JavaScript语法(ECMA-262第三版)的一个子集,用作轻量级数据交换格式
就我个人而言,我会使用。它与JSON的编码大小相当,但它可以代表一些更复杂的东西(如类,递归结构),必要时。p>
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']
如果你需要一个节省空间的解决方案,你可以使用谷歌协议缓冲区
可能您使用的协议不正确:
>>> import pickle
>>> a = range(1, 100)
>>> len(pickle.dumps(a))
492
>>> len(pickle.dumps(a, pickle.HIGHEST_PROTOCOL))
206
请参阅文档。幸运的是,有一种解决方案使用压缩,并解决了
涉及任意Python对象的一般问题
包括新课程。而不仅仅是微观管理
元组有时最好使用干燥的工具。
您的代码将更清晰,更容易重构
在类似的未来情况下
y_serial.py模块::使用SQLite存储Python对象
序列化+持久性::在几行代码中,将Python对象压缩并注释到SQLite中;然后在不使用任何SQL的情况下按时间顺序按关键字检索它们。这是数据库存储无模式数据的最有用的“标准”模块
[如果你还担心,为什么不把那些元组放进去
创建字典,然后将y_序列应用于字典。
由于透明,任何开销都可能消失
通过zlib在后台进行压缩。]
至于可读性,文档还提供了
为什么选择cPickle而不是json。对于pickle转储来说,开销非常大!Bristol Stool图表是一个很好的资源,用于确定您可能遇到的\x00字节类型configparser的问题在哪里?人类可读格式在设计上有很大的开销。eval的问题是:您需要自己处理错误(例如输入错误)。您希望出现什么错误?你用repr制作了它。可能会发生什么?为什么这很重要?:它可能会在能够将其存储在varchar或文本列(具体来说,是谁将查找和编辑此文件以放入恶意代码)之间产生区别?:标准权限提升漏洞。如我所说:键入错误。他说他想要一个人类可读的文件,所以:当人类阅读时,他也会写……仅仅因为他能。