Я пытаюсь поделиться логическим между различными сценариями. В одном скрипте я хочу отредактировать логическое значение, если вызывается определенная функция. В других сценариях я хочу использовать логическое значение. Я пытаюсь использовать маринование, но я нахожусь над моей головой. Я понятия не имею, что писать в моем файле 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'
Аргументам, необходимым для dump
и load
нужен файл-объект, поэтому вы не можете просто передать имя файла в виде строки. (и вы должны использовать версию non-s, как указано в других ответах)
Попробуйте что-то вроде этого: pickle.dump(boolean, open("filename.pkl", "w"))
и boolean = pickle.load(open("filename.pkl", "r"))
Во-первых, вам нужно использовать 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"
, иначе вы собираетесь его уничтожить.
Вы используете неправильный API. Используемые методы dumps
и loads
предназначены для строк, а не файлов. (s
в имени обозначает string
). Согласно документации, вы должны использовать dump
и load
с файлом. Вы должны предварительно открыть файл-объект.