R
Rob
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() )
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 "If you would like to add an entry select 1"
print "If you would like to delete for an entry select 2"
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 'Second lookup:'
for entry in foo.lookup('e'):
print '%-40s %s (%s)' % ( entry.name, entry.number,
entry.showtype() )