[Tutor] Address book sort of
Eri Mendz
jerimed at myrealbox.com
Mon Dec 6 08:20:42 CET 2004
On Mon, 6 Dec 2004, Liam Clarke wrote:
hey thanks a lot Liam! didnt tried it yet but later i will. appreciate you
all good people.
> Just tested the setout thing. It works. Prolly a hack, but it works.
>
>
> On Mon, 6 Dec 2004 19:05:58 +1300, Liam Clarke <cyresse at gmail.com> wrote:
>> [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
>> <jerimed at myrealbox.com> 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 - Tutor at python.org
>>>>> http://mail.python.org/mailman/listinfo/tutor
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> 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.
>>
>
>
>
--
Regards,
Eri Mendz
More information about the Tutor
mailing list