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

Я пытаюсь разделить логическое значение между различными сценариями. В одном скрипте я хочу отредактировать логическое значение, если вызывается определенная функция. В других скриптах я хочу использовать логическое значение. Я пытаюсь использовать маринование, но у меня над головой. Я понятия не имею, что написать в моем файле 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 »

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

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

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

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

0 голосов
/ 06 июля 2011

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

0 голосов
/ 06 июля 2011

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

...