python 泡菜的局限性?它可以序列化任何东西吗?
Limitations of python pickle? Can it serialize anything?
我正在编写一个必须能够将任何内容保存到磁盘的小模块。
我事先不知道变量中会有什么样的数据,所以我需要可以将任何内容序列化到磁盘的默认功能。
我想 pickle 是这种情况下最好使用的东西,因为它可以将 python 对象序列化到磁盘,并且一切都是 python.
中的对象
def to_binary(self, folder: str):
import os
import pickle
os.makedirs(folder, mode=0o777, exist_ok=True)
with open(os.path.join(folder, self.name), mode='wb') as f:
pickle.dump(self.data, f)
def from_binary(self, folder: str):
os.makedirs(folder, mode=0o777, exist_ok=True)
with open(os.path.join(folder, self.name), mode='rb') as f:
self.data = pickle.load(f)
不过,坦率地说,我不确定它的局限性是什么。好像我可以用它来将字典写入磁盘,字符串,任何香草 python。但是其他对象呢?像 pandas DataFrame? (当然,它有内置的方法来保存到磁盘,但是,我的东西会像一个例子一样在 DataFrame 对象上窒息吗?)
你知道有什么可以打破这个吗?如果是这样,是否有更通用的将数据保存到磁盘的解决方案?
旁注,我可能想使用它的另一个原因是 'hashing' 目的。如果我得到一个不可散列的对象,理论上我可以使用 pickle 来获得一个可散列的字符流。只要它的序列化过程是确定性的,就足以满足我的目的。如果您发现此辅助问题有任何问题,请告诉我。
这些东西比我真正理解的更深入计算机科学概念,所以我非常感谢你的帮助!
根据我的经验,tensorflow 库在没有可腌制对象方面存在一些问题。例如,参见 this github 问题。
其实我也不知道这个问题到底出自哪里,但肯定是反面例子
我正在编写一个必须能够将任何内容保存到磁盘的小模块。
我事先不知道变量中会有什么样的数据,所以我需要可以将任何内容序列化到磁盘的默认功能。
我想 pickle 是这种情况下最好使用的东西,因为它可以将 python 对象序列化到磁盘,并且一切都是 python.
中的对象def to_binary(self, folder: str):
import os
import pickle
os.makedirs(folder, mode=0o777, exist_ok=True)
with open(os.path.join(folder, self.name), mode='wb') as f:
pickle.dump(self.data, f)
def from_binary(self, folder: str):
os.makedirs(folder, mode=0o777, exist_ok=True)
with open(os.path.join(folder, self.name), mode='rb') as f:
self.data = pickle.load(f)
不过,坦率地说,我不确定它的局限性是什么。好像我可以用它来将字典写入磁盘,字符串,任何香草 python。但是其他对象呢?像 pandas DataFrame? (当然,它有内置的方法来保存到磁盘,但是,我的东西会像一个例子一样在 DataFrame 对象上窒息吗?)
你知道有什么可以打破这个吗?如果是这样,是否有更通用的将数据保存到磁盘的解决方案?
旁注,我可能想使用它的另一个原因是 'hashing' 目的。如果我得到一个不可散列的对象,理论上我可以使用 pickle 来获得一个可散列的字符流。只要它的序列化过程是确定性的,就足以满足我的目的。如果您发现此辅助问题有任何问题,请告诉我。
这些东西比我真正理解的更深入计算机科学概念,所以我非常感谢你的帮助!
根据我的经验,tensorflow 库在没有可腌制对象方面存在一些问题。例如,参见 this github 问题。
其实我也不知道这个问题到底出自哪里,但肯定是反面例子