问题标签 [pickle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
582 浏览

python - Python:使用`copyreg`为已经有reducer的类型定义reducer

(请记住,我正在使用 Python 3,因此解决方案需要在 Python 3 中运行。)

我想使用该copyreg模块来教 Python 如何腌制函数。当我尝试这样做时,该_Pickler对象仍会尝试使用该函数来腌制save_global函数。(这对于未绑定的方法不起作用,这就是这样做的动机。)

在查看之前,似乎_Pickler首先尝试在其自身dispatch中查找要腌制的对象的类型copyreg.dispatch_table。我不确定这是否是故意的。

我有什么方法可以告诉 Python 使用我提供的 reducer 来腌制函数吗?

0 投票
3 回答
8200 浏览

python - 如何在 Python 中修复此 unicode/cPickle 错误?

0 投票
2 回答
4077 浏览

python - GAE:ValueError:不安全的字符串泡菜

我无法从 Google App Engine 中提取对象。我正在运行 Windows 7。这是程序:

  1. 创建一个 CSV,其中一个字段为pickle.dumps([[('CS', 2110), ('CS', 3300), ('CS', 3140)]]),或一些类似的参数。

CSV 看起来像这样:

(是的,这些是\n由 s 生产的pickle.dumps()

  1. 将此文件加载到谷歌应用引擎开发服务器中:

appcfg.py upload_data --config_file="DataLoader.py" --filename="pre_req_data.csv" --kind=Course --url=http://localhost:8083/remote_api "appdir"

课程模式

数据加载器.py

  1. 确认数据加载成功:

数据存储个体实体

  1. 尝试解开:

    类 MainHandler(webapp.RequestHandler):

    /li>
  2. 观察错误:

    回溯(最近一次通话最后):

    文件“C:\Program Files\Google\google_appengine\google\appengine\ext\webapp__init__.py”,第 511 行,调用 handler.get(*groups)

    文件“main.py”,第 30 行,在 get self.writeOut("%s => %s" % (c.raw_pre_reqs, c.getPreReqs()))

    文件“src\Models.py”,第 17 行,在 getPreReqs pickle.loads(str(self.raw_pre_reqs))

    文件“C:\Python26\lib\pickle.py”,第 1374 行,加载返回 Unpickler(file).load()

    文件“C:\Python26\lib\pickle.py”,第 858 行,在加载调度键中

    文件“C:\Python26\lib\pickle.py”,第 966 行,在 load_string 中引发 ValueError,“insecure string pickle”

    ValueError:不安全的字符串泡菜

我在这里做错了什么?

0 投票
4 回答
1253 浏览

python - 确定性密钥序列化

我正在编写一个持久化到磁盘的映射类。我目前只允许str键,但如果我可以使用更多类型会很好:希望达到任何可散列的(即与 builtin 相同的要求dict),但更合理的是我会接受字符串、unicode、int 和这些类型的元组。

为此,我想推导出一个确定性的序列化方案。

选项 1 - 酸洗密钥

我的第一个想法是使用pickle(或cPickle)模块来序列化密钥,但我注意到输出pickle相互cPickle不匹配:

是否有任何实现/协议组合pickle对于某些类型是确定性的(例如,只能cPickle与协议 0 一起使用)?

选项 2 - Repr 和 ast.literal_eval

另一种选择是使用repr转储和ast.literal_eval加载。我编写了一个函数来确定给定的密钥是否能在这个过程中存活下来(它允许的类型相当保守):

这种方法的问题是它repr本身是否对我在这里允许的类型具有确定性。我相信由于 str/unicode 文字的变化,这将无法在 2/3 版本障碍中幸存下来。这也不适用于2**32 - 1 < x < 2**64在 32 位和 64 位平台之间跳转的整数。是否有任何其他条件(即字符串在同一个解释器中的不同条件下是否以不同的方式序列化)?编辑:我只是想了解它崩溃的条件,不一定要克服它们。

选项 3:自定义代表

另一个可能过大的选择是编写我自己的repr,它可以消除我知道(或怀疑可能)有问题的 repr 的事情。我只是在这里写了一个例子:http: //gist.github.com/423945

(如果这一切都失败了,那么我可以将键的散列与键和值的泡菜一起存储,然后遍历具有匹配散列的行,以寻找与预期键无关的行,但这确实很复杂其他一些事情,我宁愿不这样做。编辑: 事实证明,内置hash函数也不是跨平台的确定性。从头开始。)

有什么见解吗?

0 投票
2 回答
419 浏览

python - 在动态创建的模型上使用 Django 的 memcache API

所以我有一个创建动态模型的函数。我以与 AuditTrail 非常相似的方式完成此操作(请参阅 django wiki)。

代码示例在这里:

https://gist.github.com/0212845ae00891efe555

有什么办法可以让动态生成的类可以泡菜吗?理想情况下,那不是疯狂的猴子补丁/黑客?

0 投票
3 回答
304 浏览

python - 如何在python中保存大的“类数据库”类

我正在用reasonalby 大数据库做一个项目。它不是一个适当的 DB 文件,而是一个格式如下的类: DataBase.Nodes.Data=[[] for i in range(1,1000)]fe 这个 DataBase 总共有几千行。第一个问题 - 是我提高效率的方式,还是使用 SQL 或任何其他“适当的”数据库更好,我实际上从未使用过。主要问题 - 我想保存我DataBase class的所有记录,然后在另一个会话中用 Python 重新打开它。这可能吗,我应该使用什么工具?cPickle - 它似乎只适用于字符串,还有其他吗?

在 matlab 中有一个名为保存工作区的非常有用的功能 - 它将所有变量保存到一个文件中,您可以在另一个会话中打开该文件 - 这在 python 中会有所不同!

0 投票
1 回答
1058 浏览

python - 将数据保存到文件的 cPickle 类

我在 Python 中有一个大类,它是“类数据库”类。我想将它保存到文件中 - 所有包括数据。

这是输入(显示问题的示例,在脚本数据库中就像 10000 条记录):

这就是我得到的文件:

没有数据,只有定义。我该如何克服。也许将我的数据保存为一个类不是一个好主意?

0 投票
3 回答
9405 浏览

python - 如何阻止属性在 Python 中被腌制

我正在使用 gnosis.xml.pickle 将我自己的类的对象转换为 xml。该对象被初始化,以便:

但是,当我将对象转储到字符串时,我得到一个异常,指出pickler 遇到了不可腌制的类型(thread.lock)。

有没有办法“标记”记录器属性,以便pickler 知道不要尝试腌制该属性?

0 投票
5 回答
12331 浏览

python - cPickle ImportError:没有名为 multiarray 的模块

我正在使用 cPickle 将我的数据库保存到文件中。代码如下所示:

它工作正常。我的大多数数据库行都是列表、类 vecor 或类数组数据集的列表。

但是现在当我输入数据时,出现错误:

错误是(在这两种情况下):

有任何想法吗?

PS。现在我已经解决了这个问题,部分说:/我需要更改数组的格式。我试图追踪错误,但我做不到。导致错误的变量是这个(长:)):

cPickle 或 pickle 无法加载它。但是当我使用控制台手动执行时,相同的文件结构( [[ ]] 和所有格式完全相同,值也是 e+00 格式)然后它工作正常??????????? 我勒个去?无论如何,我已经通过更改数据格式解决了这个问题:/

0 投票
1 回答
8305 浏览

python - 从 zipfile 加载 pickle 文件

由于某种原因,我无法让 cPickle.load 处理 ZipFile.open() 返回的文件类型对象。如果我在 ZipFile.open() 返回的文件类型对象上调用 read(),我可以使用 cPickle.loads。

例子 ....

注意:我不想只压缩泡菜文件,而是压缩许多其他类型的文件。这只是一个例子。