2015-03-02 4 views
0

Это приводит к ошибке:Python - pickle.load() принимает один позиционный аргумент (2 дано)

pickle.load() takes one positional argument (2 given) 

Вот мой код:

import pickle, os.path 

created = False 

phoneBook = {} 
name = input("Please enter a name(or press enter to end input): ") 
while name != '': 
    number = input("Please enter number: ") 
    phoneBook[name] = number 
    name = input("Please enter a name(or press enter to end input): ") 
    if name == '': 
     print("Thank You!") 

print("Your phonebook contains the following entries:") 
for name, number in phoneBook.items(): 
    print("%s - %s" % (name, number)) 

while not created: 
    if not os.path.isfile('phonebook.json'): 
     phoneBook_Ori = pickle.load('phonebook.json', 'r') 
     created = True 
    else: 
     phoneBook_Ori = pickle.load('phonebook.json', 'w') 
     phoneBook_Upd = phoneBook_Ori.update(phoneBook) 
     phoneBook_Ori.write(phoneBook_Upd) 

phoneBook_Ori.close 

Почему не это травление данных?

+0

Обратите внимание, что 'pickle' does ** ** не создает файл JSON, поэтому вы не сможете прочитать файл pickle другими инструментами, которые понимают JSON. –

ответ

2

Это не то, как вы используете pickle.load:

phoneBook_Ori = pickle.load('phonebook.json', 'r') 

Он принимает объект файла в качестве аргумента при десериализации из файла, а не строк.

Попробуйте вместо этого:

# create file object with permissions 
with open('phonebook.json', 'r') as f: 
    # load using pickle de-serializer 
    phoneBook_Ori = pickle.load(f) 

Другая часть (экономия) почти такая же, убедитесь, что вы обновленное phonebook в объеме:

with open('phonebook.json', 'w') as f: 
    phoneBook_Ori = pickle.dump(phonebook, f) 

Что касается остальной части кода , вы можете прочитать another answer Я дал это очень похоже.

+0

@ PM2Ring исправлено, спасибо :) –

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