#!/usr/bin/python -d
# -*- coding: UTF-8 -*-
import sys
import getopt
import cPickle
import os
class CABinfo:
def __init__(self, name, email):
self.name = name
self.email = email
def __repr__(self):
return 'name = %s, email = %s' % (self.name, self.email)
class CAB:
def __init__(self, filename):
self.filename = filename
self.addr_infos = {}
if os.path.isdir(filename):
print '%s is a dir!' % filename
sys.exit()
if os.path.isfile(filename) and os.stat(filename)[6]:
f = file(filename, 'r+')
self.addr_infos = cPickle.load(f)
def __del__(self):
f = file(self.filename, 'w')
cPickle.dump(self.addr_infos, f)
def add_one(self, name, email):
if self.addr_infos.has_key(name):
print 'add failed. name(%s) already exists!' % name
else:
self.addr_infos[name] = CABinfo(name, email)
print 'add successful. name(%s) -> email(%s)' % (name, email)
def del_one(self, name):
if self.addr_infos.has_key(name):
del self.addr_infos[name]
print 'del successful. name(%s)' % name
else:
print 'del failed. name(%s) dose not exist' % name
def mod_one(self, name, email):
if self.addr_infos.has_key(name):
self.addr_infos[name] = CABinfo(name, email)
print 'mod successful. name(%s) -> email(%s)' % (name, email)
else:
print 'mod failed. name(%s) dose not exist' % name
def list_all(self):
if len(self.addr_infos):
print 'list all name and email-------------------------'
for n, e in self.addr_infos.items():
print 'name(%s) -> email(%s)' % (n, e)
print 'list over---------------------------------------'
else:
print 'empty now!'
def clear(self):
self.addr_infos.clear()
self.addr_infos={}
print 'clear successful!'
def query_one(self, name):
if self.addr_infos.has_key(name):
print 'query successful. name(%s) -> email(%s)' % (name, self.addr_infos[name])
else:
print 'query failed. name(%s) dose not exist' % name
def usage():
print '''
-f`file_name` -a -n`name` [-e`email`]
-f`file_name` -c
-f`file_name` -d -n`name`
-f`file_name` -l
-f`file_name` -m -n`name` [-e`email`]
-f`file_name` -q -n`name`
-h
'''
sys.exit()
def main():
filename = ''
email = ''
name = ''
is_add = False
is_clear = False
is_del = False
is_list = False
is_mod = False
is_query = False
action_count = 0
try:
opts, args = getopt.getopt(sys.argv[1:], "e:f:n:acdlmqh")
except:
usage()
for o, v in opts:
#print 'o', o, 'v', v
if o == "-e":
email = v
elif o == "-f":
filename = v
elif o == "-n":
name = v
elif o == "-a":
is_add = True
action_count += 1
elif o == "-c":
is_clear = True
action_count += 1
elif o == "-d":
is_del = True
action_count += 1
elif o == "-m":
is_mod = True
action_count += 1
elif o == "-q":
is_query = True
action_count += 1
elif o == "-l":
is_list = True
action_count += 1
elif o == "-h":
usage()
if action_count > 1:
print u"只能指定一个查询动作"
usage()
if not filename:
print u"必需同时指定 -f"
usage()
#######################################################################
ab = CAB(filename)
if is_add:
if not name:
usage()
ab.add_one(name, email)
elif is_clear:
ab.clear()
elif is_del:
if not name:
usage()
ab.del_one(name)
elif is_list:
ab.list_all()
elif is_mod:
if not name:
usage()
ab.mod_one(name, email)
elif is_query:
if not name:
usage()
ab.query_one(name)
else:
#理论上不会走这个分支
pass
del ab
#######################################################################
if __name__ == '__main__':
main()
阅读(625) | 评论(0) | 转发(0) |