如何取消腌制字典的一部分?
How to unpickle part of a pickled dictionary?
基本上;我搞砸了。我已经腌制了一些数据,一个相当大的字典,虽然我的计算机能够首先创建和腌制该字典,但当我尝试取消腌制它时,它因 运行 内存不足而崩溃。我需要以某种方式解开它,以取回数据,然后我可以将字典的每个条目写入一个单独的文件,该文件实际上可以放入内存中。对于如何做到这一点,我最好的猜测是逐个条目解开字典条目,然后将每个条目封存到它自己的文件中,或者如果失败则解开它但以某种方式将其保留为磁盘上的对象。我似乎找不到任何关于如何实际存储腌制数据以开始编写程序来恢复数据的信息。
pickle
是Python独有的序列化格式,没有user-level文档。
但是,在标准发行版的“Lib/pickletools.py”模块中有大量注释,如果您付出足够的努力,您应该能够使用该模块的 dis()
函数来生成您可以解析的输出你自己,或修改源本身。 dis()
不 执行泡菜(意味着它不会从泡菜构建任何 Python 对象)。相反,它一次读取 pickle 文件几个字节,并打印(默认为 stdout
)这些字节“意思”的更多 human-readable 形式。
基本上;我搞砸了。我已经腌制了一些数据,一个相当大的字典,虽然我的计算机能够首先创建和腌制该字典,但当我尝试取消腌制它时,它因 运行 内存不足而崩溃。我需要以某种方式解开它,以取回数据,然后我可以将字典的每个条目写入一个单独的文件,该文件实际上可以放入内存中。对于如何做到这一点,我最好的猜测是逐个条目解开字典条目,然后将每个条目封存到它自己的文件中,或者如果失败则解开它但以某种方式将其保留为磁盘上的对象。我似乎找不到任何关于如何实际存储腌制数据以开始编写程序来恢复数据的信息。
pickle
是Python独有的序列化格式,没有user-level文档。
但是,在标准发行版的“Lib/pickletools.py”模块中有大量注释,如果您付出足够的努力,您应该能够使用该模块的 dis()
函数来生成您可以解析的输出你自己,或修改源本身。 dis()
不 执行泡菜(意味着它不会从泡菜构建任何 Python 对象)。相反,它一次读取 pickle 文件几个字节,并打印(默认为 stdout
)这些字节“意思”的更多 human-readable 形式。