【问题标题】:do I still need to file.close() when dumping a pickle in one line?在一行中倾倒泡菜时,我还需要 file.close() 吗?
【发布时间】:2014-12-19 17:13:15
【问题描述】:

我目前像这样倾倒泡菜:

f = open("objectname.p","w")

pickle.dump(objectname,f)

f.close()

但是,为了在我的文本编辑器中创建一个简洁的 code-sn-p,我希望将内容保持在一行中。我很想:

pickle.dump(objectname,open("objectname.p","w"))

我的问题是,我还需要f.close() 文件对象吗?如果是这样,如何? (请注意,我没有为打开的文件对象分配变量)。

“是”的原因:f.close() 存在

拒绝的原因:objectname = pickle.load(open("objectname.p","r")) 是推荐的加载泡菜对象的方法,如pickle python docs 中所述

没有与“pickle”和“file”相匹配的相关问题与此重复。由于我的词汇量有限,我无法搜索解决方案

【问题讨论】:

    标签: python-2.7 pickle


    【解决方案1】:

    酸洗与文件的打开和关闭无关。它只说明了文件的内容。因此,在您的单行文件中,文件已打开但未关闭。

    因此,最好这样做:

    with open("objectname.p","w") as f:
        pickle.dump(objectname, f)
    

    这使用with statement 确保在块的末尾它会自动调用f.close()。您使用的是 Python 2.7,并且该 Python 版本支持此功能。

    【讨论】:

    • 1 几乎是一条线的答案,如果仍然有一条线的解决方案,我会稍等片刻再接受
    • 单行解决方案不一定更好,因为清晰度往往会下降。此外,除了将线合并在一起之外,没有一种单一的解决方案。
    • 您可能还应该按照建议使用二进制模式以确保安全! wiki.python.org/moin/UsingPickle with open("objectname.p","wb") as f
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2021-10-24
    • 2012-08-25
    相关资源
    最近更新 更多