Shelve newbie??

Rob talon2lm at yahoo.com
Sun Nov 2 21:16:25 EST 2003


I have been tasked, an assignment from school, to make a usable database
using this code...my question, Where is there some good doc on how to use
Shelve? The python.org doesn't say much of anything about it. It's driving
me nutty.  I'm trying to figure out a way to delete enteries (with user
inputting the name). Here's the code so far...Obviously it's not ready for
turn in!

import shelve
import string
#import pickle

UNKNOWN = 0
HOME = 1
WORK = 2
FAX = 3
CELL = 4

class phoneentry:
 def __init__(self, name = 'Unknown', number = 'Unknown',
   type = UNKNOWN):
  self.name = name
  self.number = number
  self.type = type

 #  create string representation
 def __repr__(self):
  return('%s:%d' % ( self.name, self.type ))

 #  fuzzy compare or two items
 def __cmp__(self, that):
  this = string.lower(str(self))
  that = string.lower(that)

  if string.find(this, that) >= 0:
   return(0)
  return(cmp(this, that))

 def showtype(self):
  if self.type == UNKNOWN: return('Unknown')
  if self.type == HOME: return('Home')
  if self.type == WORK: return('Work')
  if self.type == FAX: return('Fax')
  if self.type == CELL: return('Cellular')

class phonedb:
 def __init__(self, dbname = 'C:/phonedata'):
  self.dbname = dbname;
  self.shelve = shelve.open(self.dbname);

 def __del__(self):
  self.shelve.close()
  self.shelve = None

 def add(self, name, number, type = HOME):
  e = phoneentry(name, number, type)
  self.shelve[str(e)] = e



 def lookup(self, string):
  list = []
  for key in self.shelve.keys():
   e = self.shelve[key]
   if cmp(e, string) == 0:
    list.append(e)

  return(list)


#  if not being loaded as a module, run a small test


b = 1
foo = phonedb()
while b != 3:
    print b
    print "Welcome to the Phone Database"

    print "Please choose from the following"
    print
    print "If you would like to add an entry select 1"
    print
    print "If you would like to delete for an entry select 2"
    print
    print "To quit select 3 "
    b = input(':')
    if b == 1:

        print "Please enter the full name: (Example: John Smith)"
        n = raw_input(':')
        print "Please enter the phone number: (Example: 970-432-5432)"
        p = raw_input(':')
        print "Please enter the phone type: (0 = Unkown, 1 = Home, 2 = Work,
3 = Fax, 4 = Cell)"
        t = raw_input(':')
        if t == '0':
            foo.add(n, p, UNKNOWN)
        if t == '1':
            foo.add(n, p, HOME)
        if t == '2':
            foo.add(n, p, WORK)
        if t == '3':
            foo.add(n, p, FAX)
        if t == '4':
            foo.add(n, p, CELL)

        print t
    if b == 2:
        print "Enter the name to delete"
        d = raw_input(':')


    #foo.add('Sean Reifschneider', '970-555-2222', CELL)
    #foo.add('Evelyn Mitchell', '970-555-1111', HOME)

    print 'First lookup:'
    for entry in foo.lookup('reifsch'):
         print '%-40s %s (%s)' % ( entry.name, entry.number,
entry.showtype() )
    print

    print 'Second lookup:'
    for entry in foo.lookup('e'):
         print '%-40s %s (%s)' % ( entry.name, entry.number,
entry.showtype() )






More information about the Python-list mailing list