from exceptions import IOError """ input: phone book filename output: reads phone book file and creates a phone book from it. If the file doesn't exist, it creates an empty phone book. Returns the phone book. """ def read_phone_book(filename): # If the file doesn't exist (i.e. we haven't saved it yet), we don't want to # crash. This code prevents that and returns an empty dictionary in that case try: fh = open(filename, 'r') except IOError: print 'Error opening file. Using empty directory.' return {} # The file does exist. Read it and create the phone book from its contents phone_book = {} for line in fh: line = line.strip(' \n\r\t') print line if line == '': continue data = line.split(':') phone_book[data[0]] = data[1] fh.close() return phone_book """ input: filename and phone book output: writes the phone book to file; returns nothing """ def save_phone_book(filename, phone_book): fh = open(filename, 'w') for entry in phone_book: string = entry + ':' + phone_book[entry] + '\n' # Need a newline character! fh.write(string) fh.close() return None """ input: none output: (name, number) entered by user to add to phone book """ def get_user_input(): name = raw_input('Enter name to add (q to quit adding names): ') if name.lower() == 'q': return None number = raw_input('Enter number for ' + name + ': ') return (name, number) """ input: phone book output: allows user to add multiple names and returns phone book """ def build_phone_book(phone_book): while True: entry = get_user_input() if entry == None: break phone_book = add_entry(entry, phone_book) return phone_book """ input: tuple with name and number; phone book output: adds the tuple entry and returns phone book """ def add_entry(info, phone_book): if info[0] in phone_book: print info[0] + " exists. Overwriting." phone_book[info[0]] = info[1] return phone_book """ input: name to search for, phone_book ouput: returns number belonging to name or None if name not found """ def retrieve_entry(name, phone_book): if name in phone_book: return phone_book[name] print name + " not found." return None """ input: number to search for, phone_book output: returns name belonging to number or None if number not found """ def retrieve_entry_by_number(number, phone_book): name_found = False for name in phone_book: if phone_book[name] == number: return name if not name_found: print number + ' not found.' return None """ input: name to delete, phone_book output: deletes entry for name and returns updated phone book """ def delete_entry(name, phone_book): if not name in phone_book: print name + ' not found.' return phone_book del(phone_book[name]) print name, 'deleted.' return phone_book # Tests # #p = {} #p = add_entry(('Chris', 123), p) #print p # ## Overwrite existing entry #p = add_entry(('Chris', 456), p) #print p # ## Retrieve valid entry #print retrieve_entry('Chris', p) # ## Attempt to retrieve invalid entry #print retrieve_entry('Bob', p) # ## Add Bob #p =add_entry(('Bob', 345), p) # ## Sort by key and print entries #keys = sorted(p.keys()) #for key in keys: # print key, p[key] # ## Delete a valid entry #print delete_entry('Bob', p) # ## Attempt to delete an invalid entry (already been removed) #print delete_entry('Bob', p) # ## Reading file tests #print read_abook('abook.txt') #print read_abook('does_not_exist.txt')