我正在尝试在不同脚本之间共享一个布尔值。在一个脚本中,如果调用某个函数,我想编辑布尔值。在其他脚本中,我想使用布尔值。我正在尝试使用酸洗,但我已经超过了我的头脑。我不知道在我的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'
答案 0 :(得分:3)
dump
和load
所需的参数需要一个文件对象,因此您不能简单地将文件名作为字符串传递。 (你应该使用其他答案中提到的非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。您使用的dumps
和loads
方法用于字符串,而不是文件。 (名称中的s
代表string
)。根据{{3}},您应该将dump
和load
与文件对象一起使用。您应该先打开文件对象。