Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中基本类型的轻量级pickle?_Python_Serialization_Pickle - Fatal编程技术网

python中基本类型的轻量级pickle?

python中基本类型的轻量级pickle?,python,serialization,pickle,Python,Serialization,Pickle,我所要做的就是序列化和取消序列化字符串或整数的元组 我查看了pickle.dumps(),但字节开销很大。基本上,它看起来需要占用4倍的空间。此外,我只需要基本类型,不需要序列化对象 封送处理在空间方面稍微好一点,但结果充满了令人讨厌的\x00字节。理想情况下,我希望结果是人类可读的 我曾想过只使用repr()和eval(),但有没有一种不使用eval()就能实现这一点的简单方法 这将存储在数据库中,而不是文件中。字节开销很重要,因为它可能会在需要文本列和varchar之间产生差异,并且通常数据

我所要做的就是序列化和取消序列化字符串或整数的元组

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

封送处理在空间方面稍微好一点,但结果充满了令人讨厌的\x00字节。理想情况下,我希望结果是人类可读的

我曾想过只使用repr()和eval(),但有没有一种不使用eval()就能实现这一点的简单方法


这将存储在数据库中,而不是文件中。字节开销很重要,因为它可能会在需要文本列和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或文本列(具体来说,是谁将查找和编辑此文件以放入恶意代码)之间产生区别?:标准权限提升漏洞。如我所说:键入错误。他说他想要一个人类可读的文件,所以:当人类阅读时,他也会写……仅仅因为他能。