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. <[EMAIL PROTECTED]> 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 - [EMAIL PROTECTED] > > http://mail.python.org/mailman/listinfo/tutor > > > > > > _______________________________________________ > Tutor maillist - [EMAIL PROTECTED] > 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. _______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor