繁体   English   中英

泡菜怎么知道选哪个?

[英]how does pickle know which to pick?

我的泡菜功能正常工作

    with open(self._prepared_data_location_scalar, 'wb') as output:
        # company1 = Company('banana', 40)
        pickle.dump(X_scaler, output, pickle.HIGHEST_PROTOCOL)
        pickle.dump(Y_scaler, output, pickle.HIGHEST_PROTOCOL)


    with open(self._prepared_data_location_scalar, 'rb') as input_f:
        X_scaler = pickle.load(input_f)
        Y_scaler = pickle.load(input_f)

但是,我很好奇腌菜怎么知道加载? 这是否意味着一切都必须在同一序列中?

你有什么好。 这是泡菜的记录特征

可以对同一个Pickler实例的dump()方法进行多次调用。 然后必须将它们匹配到相应Unpickler实例的load()方法的相同调用次数。

这里没有魔力,pickle是一种非常简单的基于堆栈的语言,它将python对象序列化为字节串。 pickle格式知道对象边界:通过设计, pickle.dumps('x') + pickle.dumps('y')pickle.dumps('xy')不是相同的字节pickle.dumps('xy')

如果你有兴趣了解一些有关实现的背景知识,那么这篇文章很容易阅读,以便对python pickler有所了解。

哇我甚至都不知道你能做到这一点......而且我已经使用python很长一段时间......所以我的书非常棒,但是你真的不应该这样做会很难用到以后(特别是如果你不工作的话)

我建议你这样做

pickle.dump({"X":X_scalar,"Y":Y_scalar},output)

 ...
data = pickle.load(fp)
print "Y_scalar:",data['Y']
print "X_scalar:",data['X']

除非你有一个非常令人信服的理由来保存和加载数据,就像你在问题中一样......

编辑回答实际问题...

它从文件的开头加载到结尾(即它们按照它们被转储的顺序加载它们)

是的,pickle按照保存顺序挑选对象。

直观地,pickle在写入(转储)到文件时附加到结尾,并从文件中顺序读取(加载)内容。

因此,保留了订单,允许您按照序列化的确切顺序检索数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM