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

2 投票
3 回答
5464 浏览
提问于 2025-04-16 20:55

我想在不同的脚本之间共享一个布尔值(就是一个真或假的值)。在一个脚本里,我想在某个函数被调用时修改这个布尔值。而在其他脚本里,我想使用这个布尔值。我试着用一种叫做“pickling”的方法,但我完全搞不懂。我不知道该在我的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文件是空的。
当我尝试运行主脚本(这是一个和使用pickling的脚本完全不同的脚本)时,我遇到了“AttributeError: 'str' object has no attribute 'write'”的错误。

3 个回答

0

你用错了接口。你现在用的 dumpsloads 方法是处理字符串的,不是用来处理文件的。(名字里的 s 代表的是 string,也就是字符串)。根据文档,你应该使用 dumpload 方法来处理文件对象。在使用之前,你需要先打开文件对象。

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",否则你会把文件弄坏。

5

使用 dumpload 这两个函数时,需要提供一个文件对象,所以你不能直接把文件名作为字符串传进去。(而且你应该使用非字符串版本,正如其他回答提到的那样)

你可以试试这样写: pickle.dump(boolean, open("filename.pkl", "w"))

然后用 boolean = pickle.load(open("filename.pkl", "r")) 来读取数据。

撰写回答