[quote] if select == '1' or select == 'v' or select == 'V': if file_in_disk in os.listdir('/home/jerimed'): # change??? fhandle = open(file_in_disk, 'r') # read mode cPickle.load(fhandle) # restore saved data fhandle.close() show_contacts() elif len(data_holder) > 0: show_contacts() else: is_empty() [/quote]
if file_in_disk in os.listdir('/home/jerimed'): - if os.path.exists('/home/jerimed/file_in_disk'): Oh, and if it's in a subdir off the current dir - if os.path.exists('./home/jerimed/file_in_disk'): "./' means current or you could use - path = os.path.join(os.getcwd(), 'home','jerimed','filename') [quote]How do i pretty print output of dictionary container? Sort of tabular form or something, e.g., 1. name1 email address1 2. name2 email address2[/quote] try this - index = 0 for (key, item) in myDict.items(): index += 1 print "%d. %s \t %s" % (index, key, item) Although you may find that the length of key will vary, making it look messy. So, find the max length of the keys (names) first - highLength=0 for element in myDict.keys(): if len(element) > highLength: highLength = len(element) index = 0 minimumSpaces= 5 for (key, item) in myDict.items(): index += 1 spaceMult=(highLength+minimumSpaces)-len(key) outString=str(index)+". "+key+(spaceMult * " ") + item print outString What this line spaceMult=(highLength+minimumSpaces)-len(key) does - So, say you have two names - Bob Bobalicious obviously one tab(which Python usually counts as four spaces) separating will be Bob Bob's email Bobalicious Bobalicious' email spaceMult=(highLength+minimumSpaces)-len(key) highLength is 11, the length of Bob. The minimum separation between key and item is 5 spaces, so we're looking for the item to be 16 chars away from the start of the line. so spaceMult=(11+5)-len('bob') spaceMult = 13 So, the function will pad 13 spaces between 'bob' and 'bob's email' whereas only the minimum 5 between Bobalicious and his email. Which should equal nicely laid out. Haven't tested this though... Standard disclaimer - There's probably an easier way to do it, and a more elegant way. Which someone will post shortly. Cheers, Liam Clarke On Mon, 6 Dec 2004 07:55:11 +0300 (Arab Standard Time), Eri Mendz <[EMAIL PROTECTED]> wrote: > On Sun, 5 Dec 2004, Jacob S. 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... > > Thanks a lot Jacob, and to all who replied. I'll go through the code > definitely. I started building that address book last night and its > pretty crude. I hit a snag though: i was able to save the name/email > address pairs and write to disk. But i cant get it to load on startup. My > location is several dirs down my home directory. Of course the pickled > file is in same directory as the code. Its something like: > > if select == '1' or select == 'v' or select == 'V': > if file_in_disk in os.listdir('/home/jerimed'): # change??? > fhandle = open(file_in_disk, 'r') # read mode > cPickle.load(fhandle) # restore saved data > fhandle.close() > show_contacts() > elif len(data_holder) > 0: > show_contacts() > else: > is_empty() > > /home/jerimed should be changed and should be dynamic to match wherever > the python script is. Can you guyz advise? And is that first > if-statement right? I like to know if im doing the right thing. > > How do i pretty print output of dictionary container? Sort of tabular > form or something, e.g., > > 1. name1 email address1 > 2. name2 email address2 > > Just for my learning experience :-). Thanks! > > -- > Regards, > Eri Mendz > > > > > > > > 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 > > > > > > _______________________________________________ > 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. _______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor