sat*_*oru 127 python serialization use-case pickle
我看过pickle文档,但我不明白pickle在哪里有用.
泡菜有哪些常见的用例?
Dav*_*rby 56
我遇到的一些用途:
1)将程序的状态数据保存到磁盘,以便它可以在重新启动时继续它停止的位置(持久性)
2)通过多核或分布式系统中的TCP连接发送python数据(编组)
3)将python对象存储在数据库中
4)将任意python对象转换为字符串,以便它可以用作字典键(例如,用于缓存和memoization).
最后一个有一些问题 - 两个相同的对象可以被腌制并产生不同的字符串 - 或者甚至同一个被腌制两次的对象可以有不同的表示.这是因为泡菜可以包括参考计数信息.
为了强调@ lunaryorn的评论 - 你不应该从不受信任的来源中取消字符串,因为精心设计的泡菜可以在你的系统上执行任意代码.例如,请参阅https://blog.nelhage.com/2011/03/exploiting-pickle/
Jac*_*son 10
最小的往返示例..
>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'
Run Code Online (Sandbox Code Playgroud)
编辑:但作为酸洗的现实世界的例子的问题,也许在最先进的使用酸洗的(你必须相当深挖掘到源)ZODB: http://svn.zope.org/
否则,PyPI会提到几个问题:http://pypi.python.org/pypi?:action = search&term = tips&subsmit =search
我个人已经看到几个通过网络发送的腌制对象的例子,作为一种易于使用的网络传输协议.
我在我的一个项目中使用过它.如果应用程序在它工作期间终止(它执行了很长的任务并处理了大量数据),我需要保存整个数据结构并在应用程序再次运行后重新加载它.我之所以使用cPickle,速度是至关重要的,数据的大小非常大.
小智 6
Pickle 就像数据结构和类的“另存为..”和“打开..”。假设我想保存我的数据结构,以便它在程序运行之间保持不变。
保存:
with open("save.p", "wb") as f:
pickle.dump(myStuff, f)
Run Code Online (Sandbox Code Playgroud)
加载:
try:
with open("save.p", "rb") as f:
myStuff = pickle.load(f)
except:
myStuff = defaultdict(dict)
Run Code Online (Sandbox Code Playgroud)
现在我不必重新从头开始构建 myStuff,我可以从上次中断的地方继续学习。
| 归档时间: |
|
| 查看次数: |
18141 次 |
| 最近记录: |