On 2:59 PM, Carter Danforth wrote:
Hi, I'm trying to a create a basic addressbook for practice. I'm using a
dictionary with cpickle, though I'm not sure how to persistently store each
instance in the dictionary. Below is the code I have so far.

If I run it once and add a contact and the details, it's fine. p.load(f)
shows the details next time I run it, but if I add another contact, and run
it again, the previous key:value doesn't show. It gets replaced by the new
one.

How can I fix this so that it adds the new key:value to the dictionary
instead of replacing the existing one? Appreciate any help, thanks.

import cPickle as p
addressbook = 'addressbook.data'
f = file(addressbook, 'r+')

class address:
     def __init__(self, name, tel, email):
         self.name = name
         self.tel = tel
         self.email = email

         ab = {self.name : self.tel}

         f = file(addressbook, 'r+')
         p.dump(ab, f)

print p.load(f)
x = raw_input()

if x == 'add':
     name = raw_input('\nName: ')
     tel = raw_input('Tel: ')
     email = raw_input('Email: ')

     contact = address(name, tel, email)

I have no clue what you're trying to do with that address object; it's confusing initialization with persistence, and you create such an object, but never actually use it. I would remove any reference to the address book from that object. I'd also rename it to Address, since class names are supposed to be uppercase (PEP8)

But anyway, in your flow, you do a p.load(), but never save the result. Every time you save to the addressbook file, you start over with just the one entry.

One way to fix this is to save the p.load() result as a variable, presumably of type dictionary, then add the 'contact' to that dictionary, and at the end of the script, save that variable with p.dump(addresses, f)

addresses =   p.load(f)

interact with user --
           addresses[name] = Address(name, tel, email)

p.dump(addresses, f)

I also don' t know how you get away with running your script the first time, since it blows up if there's no existing pickle file.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to