[Tutor] Address book sort of

Liam Clarke cyresse at gmail.com
Mon Dec 6 02:08:14 CET 2004


Oops

I've got my own wee dictionary reader, writers. Very simple -

So, you have a user Dave, who has a dictionary of {'address':'21 jump
St', 'Number: 'One, the loneliest.'}

So, you create a dictionary of dictionaries -myDict = {'Dave' :
{'address':'21 jump St', 'Number: 'One, the loneliest.'}

And then you have -
def writeDict(file, diction):
    inp=file(file, 'w')

    for (key, item) in diction.items():
      inp.write(key+'\n')
      inp.write(item+'\n')
    inp.close()

    return 1

Courtesy of Danny Yoo, the very helpful pair generating function below
(it's indispensable this one, I use it so often)

def groupAdjacentElements(someSequence, n = 2):
    """A little helper utility to group up adjacent elements."""
    nextGroup = []
    for element in someSequence:
        nextGroup.append(element)
        if len(nextGroup) == n:
            yield tuple(nextGroup)
            nextGroup = []

Goes with -

def loadDict(filename):
   store2 = file(filename,'r')

   for (name, entry) in groupAdjacentElements(store2):
     name = name.strip()
     entry = entry.strip()
     book[name] = entry

   store2.close()
   return book

So - to save myDict to saveddic.dct -

writeDict('saveddic.dct', myDict)

and to open it -

myDictCopy=loadDict('saveddic.dct')

And it saves in the format -

dave
{'address':'21 Jump St', 'number':'One, the loneliest'}
key
value
key
value

Nice and plaintext.

HTH




On Sun, 5 Dec 2004 16:31:59 -0500, Jacob S. <keridee at jayco.net> wrote:
> I did something like this about three or four months ago...
> This is what I did. Notice the use of the built-in str() and eval()
> functions to write and receive data to and from Telephone.cfg...
>
> from __future__ import division
> tel = {}
> try:
>     file = open('Telephone.cfg', 'r')
> except:
>     file = open('Telephone.cfg','w')
>     file.close()
>     file = open('Telephone.cfg','r')
> try:
>     tel = eval(file.read())
>     a = 0
> except:
>     a = 1
>     print "No entries on file."
>     pass
> print """\
> Commands are:
> add
> get
> save
> delete
> quit
> all is a wildcard
> """
>
> while 1:
>     ask = raw_input('Tell me what you wish to do. ')
>     if ask == "quit":
>         break
>     ask = ask.split(" ")
>     command = ask[0]
>     entity = ask[1:]
>     entity = " ".join(entity)
>     if entity == '':
>         entity = raw_input("Who do you want to %s? " % command)
>     if command == 'add':
>         person = entity
>         if tel.has_key(person):
>             print "That person is already in there. If you wish to edit the
> file, please delete the record first."
>         else:
>             tel[person] = raw_input("What is their phone number? ")
>     if command == 'get':
>         if a == 1:
>             print "Sorry, there are no entries available."
>         else:
>             person = entity
>             if person == 'all':
>                 key = tel.keys()
>                 key.sort()
>                 print
>                 for x in key:
>                     print "%s\n%s\n" % (x,tel[x])
>             elif tel.has_key(person):
>                 print "\n%s\n%s\n" % (person,tel[person])
>             else:
>                 print "%s is not in your records." % person
>     if command == 'save':
>         file=open('Telephone.cfg', 'w')
>         file.write(str(tel))
>         file.close()
>         print 'Saved in Telephone.cfg'
>     if command == 'delete':
>         if a == 1:
>             print "Sorry, there are no entries available."
>         else:
>             person = entity
>             if person == 'all':
>                 tel={}
>                 newfile=open('Telephone.cfg', 'w')
>                 newfile.close()
>             else:
>                 if tel.has_key(person):
>                     del tel[person]
>                 else:
>                     print "%s is not in your records." % person
> file.close()
> file = open('Telephone.cfg', 'w')
> file.write(str(tel))
> file.close()
>
> As always, feel free to modify, use, and otherwise tear apart my code and
> give me suggests on how to improve it.
> Jacob Schmidt
>
>
>
> > Dear Tutor,
> >
> > I like to know what is the proper procedure (is algorithmn the right
> > term?) in creating data in a program, write it to file, close the app
> > then retrieve the data when run again. Basically, I'm trying to simulate
> > a simple address book (well not really for the datas are just names for
> > now) and so far have created the basic menu interface. It is console
> > base so forget gui. I ask user input and store it in a list. There are
> > menus to change, delete the data, and to save the data list in file. I
> > use cPickle for this and have verified the file is created by checking
> > in my $PWD. I want to retrieve that data when program is run again. What
> > to add in my code? I thought not to post the code but explain it as
> > above.
> >
> > What i want: when program is run again, the saved data is loaded when user
> > selects option 1 below. Of course the first time it is run, the list is
> > empty.
> >
> > def print_options():
> >        print '''
> >        Options:
> >        [1] - Print content of list
> >        [2] - Add name to list
> >        [3] - Delete name from list
> >        [4] - Change name in list
> >        [5] - Save list to file
> >        [P] - Print this menu
> >        [Q] - Quit
> >        '''
> >
> >
> >
> > --
> > Regards,
> > Eri Mendz
> > Using PC-Pine 4.61
> >
> >
> > --
> > Using PC-Pine 4.61
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
> >
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


--
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.


More information about the Tutor mailing list