[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