2016-09-20 2 views
1

Ранее я мог загрузить файл рассола. Я сохранил новый файл под другим именем. Я не могу загрузить старый или новый файл. Который является обломком, поскольку он содержит данные, которые я много работал, чтобы скраб.Не удалось загрузить файл рассола

Вот код, который я использую, чтобы сохранить:

def pickleStore(): 
    pickle.dump(store, open("...shelf3.p", "wb")) 

Вот код, который я использую для повторной загрузки:

def pickleLoad(): 
    store = pickle.load(open(".../shelf3.p","rb")) 

Созданный файл существует, и я бегу pickleLoad () ошибок не возникает, и переменные не отображаются в проводнике переменных панели. Если я попытаюсь загрузить несуществующий файл, я получаю сообщение об ошибке.

Я запускаю spyder, python 3.5.

Любые предложения?

+2

'store = ...' присваивает локальной переменной, которая больше не существует, когда функция завершается. Вы хотите иметь «глобальный магазин» в передней части своей функции, чтобы присвоить ему переменную уровня модуля? –

+0

Да, это мое намерение. Будет ли причина, почему я не хочу, чтобы это было так? – abc

+0

ну, вы не на самом деле * ничего не делаете * в предоставленной вами функции - он сразу же выходит и отбрасывает извлеченный контент. Вы можете фактически продемонстрировать, что вы пытаетесь прочитать эту локальную переменную и считаете ее пустой, так или иначе. –

ответ

2

Если вы хотите записать в переменном уровне модуля из функции, вы должны использовать ключевое слово global:

store = None 

def pickleLoad(): 
    global store 
    store = pickle.load(open(".../shelf3.p","rb")) 

... или возвращает значение и выполнить задание из кода уровня модуля :

store = None 

def pickleLoad(): 
    return pickle.load(open(".../shelf3.p","rb")) 

store = pickleLoad() 
1

В общем и более универсальный подход, я хотел бы предложить что-то вроде этого:

def load(file_name): 
    with open(simulation, 'rb') as pickle_file: 
     return pickle.load(pickle_file) 

def save(file_name, data): 
    with open(file_name, 'wb') as f: 
     pickle.dump(data, f) 

Я добавил этот фрагмент кода для нескольких проектов в целях сокращения переписывания же кода несколько раз.

+0

Какие проблемы удается решить, кроме того, что дескриптор файла закрывается, как только блок выходит (а не откладывает это на время сбора мусора)? –

Смежные вопросы