如何在我可以在python scrpits中使用的pkl文件中编写write()方法?

时间:2011-07-06 06:34:50

标签: python methods pickle

我正在尝试在不同脚本之间共享一个布尔值。在一个脚本中,如果调用某个函数,我想编辑布尔值。在其他脚本中,我想使用布尔值。我正在尝试使用酸洗,但我已经超过了我的头脑。我不知道在我的pkl文件中写什么。我的代码有点像这样:

one.py

    import pickle

    boolean = False
    pickle.dumps(boolean, "filename.pkl")

    class Foo(object):

    #init method irrelevant

        def bar(self):
            foobar = raw_input("> ")

            if foobar == "baz":
                boolean = True
                pkl_file = open("filename.pkl", 'w')
                pickle.dumps(boolean, "filename.pkl")
            else:
                print "Hello"

two.py

    import pickle

    class Foobar(object):

    #init method irrelevant

    def foo_bar(self):
        foobar = raw_input("> ")
        boolean = pickle.loads("filename.pkl")

        if foobar == "foo" and boolean:
            print "Hi!"
        elif foobar == "foo":
            print "Hello there."
        else:
            print "Bye!"

我有另一个类似于two.py的脚本。我的pkl文件是空的。
当我尝试运行主脚本(与酸洗的脚本完全不同)时,我得到“AttributeError:'str'对象没有属性'write'

3 个答案:

答案 0 :(得分:3)

dumpload所需的参数需要一个文件对象,因此您不能简单地将文件名作为字符串传递。 (你应该使用其他答案中提到的非s版本)

尝试这样的事情:pickle.dump(boolean, open("filename.pkl", "w"))

boolean = pickle.load(open("filename.pkl", "r"))

答案 1 :(得分:0)

首先,您需要使用pickle.dump(...)pickle.load(),而不是字符串版本,就像这样,

import pickle

f = open('gherkin.pkl','w')
pickle.dump(False,f)
f.close()
g = open('gherkin.pkl','r')
print pickle.load(g)
g.close()

其次,如果您再次打开文件进行阅读,则需要将模式设置为"r",否则您将要销毁它。

答案 2 :(得分:0)

您使用的是错误的API。您使用的dumpsloads方法用于字符串,而不是文件。 (名称中的s代表string)。根据{{​​3}},您应该将dumpload与文件对象一起使用。您应该先打开文件对象。