如何在pkl文件中编写可以在我的Python脚本中使用的write()方法?
我想在不同的脚本之间共享一个布尔值(就是一个真或假的值)。在一个脚本里,我想在某个函数被调用时修改这个布尔值。而在其他脚本里,我想使用这个布尔值。我试着用一种叫做“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
你用错了接口。你现在用的 dumps
和 loads
方法是处理字符串的,不是用来处理文件的。(名字里的 s
代表的是 string
,也就是字符串)。根据文档,你应该使用 dump
和 load
方法来处理文件对象。在使用之前,你需要先打开文件对象。
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
使用 dump
和 load
这两个函数时,需要提供一个文件对象,所以你不能直接把文件名作为字符串传进去。(而且你应该使用非字符串版本,正如其他回答提到的那样)
你可以试试这样写: pickle.dump(boolean, open("filename.pkl", "w"))
然后用 boolean = pickle.load(open("filename.pkl", "r"))
来读取数据。