Как мне написать метод write () в файле pkl, который я могу использовать в своих скриптах на python?

1

Я пытаюсь поделиться логическим между различными сценариями. В одном скрипте я хочу отредактировать логическое значение, если вызывается определенная функция. В других сценариях я хочу использовать логическое значение. Я пытаюсь использовать маринование, но я нахожусь над моей головой. Я понятия не имею, что писать в моем файле 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
    Спасибо, ребята! На самом деле это было написано в моем коде с помощью dump и load, но я не заметил разницы, когда набирал свой пример. Совет открыть файл действительно помог. Также добавить 'r' при загрузке файла. Теперь это работает. Спасибо!
Теги:
methods
pickle

3 ответа

3
Лучший ответ

Аргументам, необходимым для dump и load нужен файл-объект, поэтому вы не можете просто передать имя файла в виде строки. (и вы должны использовать версию non-s, как указано в других ответах)

Попробуйте что-то вроде этого: pickle.dump(boolean, open("filename.pkl", "w"))

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

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", иначе вы собираетесь его уничтожить.

0

Вы используете неправильный API. Используемые методы dumps и loads предназначены для строк, а не файлов. (s в имени обозначает string). Согласно документации, вы должны использовать dump и load с файлом. Вы должны предварительно открыть файл-объект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню