有人可以对我腌制时'with open()'的每个组成部分做什么给出 ELI5 解释吗?



我已经多次使用这种语法来抓取文件,但事实是我不明白实际发生了什么。我只知道它给了我想要的结果。

with open('some_model_name.pickle', 'wb') as to_write:
pickle.dump(some_model_object, to_write)

但实际发生了什么?如果我不指定wb怎么办?什么是as to_write

与我在中阅读我的模型时相同

with open(path+'some_model_name.pickle', 'rb') as to_read:
some_model_object = pickle.load(to_read)

;wb";是";以二进制模式写入";。如果不指定";wb";您将获得默认模式open,它是以文本模式读取的。在这种情况下,对pickle.dump的调用将失败,因为该文件是以只读模式打开的,并且您试图写入一些字节。

绑定as to_write意味着将open调用的返回值分配给名为to_write的局部变量。在不使用上下文管理器("with statement"(的情况下,做同样事情的类似方法可能看起来像:

try:
to_write = open('some_model_name.pickle', 'wb')
pickle.dump(some_model_object, to_write)
finally:
to_write.close()

这是一个简化的版本,在这个答案末尾的docs链接中给出了一个更完整的等价物。

问题中显示的第二个代码块是类似的,只是它打开了文件";some_model_name.spickle"在";读取二进制";模式";rb";,这是适当的,因为这里使用CCD_ 8(读取字节(而不是CCD_。

我所描述的部件的相关文档链接:

  • 内置函数open
  • with语句

最新更新