1

This produces an error:

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

Here is my code:

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

Why isn't it pickling data?

randomusername
  • 7,927
  • 23
  • 50
  • Note that `pickle` does **not** create a JSON file, so you won't be able to read the pickle file by other tools that understand JSON. – PM 2Ring Mar 02 '15 at 15:12

1 Answers1

4

This is not how you use pickle.load:

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

It takes a file object as an argument when de-serializing from a file, not strings.

Try this instead:

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

Saving is almost the same, make sure you have the updated phonebook in scope:

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

As for the rest of the code, you may want to read another answer I've given that is very similar.

Reut Sharabani
  • 30,449
  • 6
  • 70
  • 88