python实现一个简单的地址簿

看了简明python教程,动手试试,用python实现一个简单的地址簿

版本一

这只是一个简单的试验版本,如何新建对象并保存。

#!/usr/bin/python
# Filename: addressBook.py
 
import cPickle as pickle
 
class PersonInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return '姓名:%s,年龄:%s' % (self.name, self.age)
 
 
addrFileName = 'address.data'
addrList = {}
pi = PersonInfo('Fatkun', 23)
addrList[pi.name] = pi
pi = PersonInfo('Olunx', 22)
addrList[pi.name] = pi
addrFile = file(addrFileName, 'w')
pickle.dump(addrList, addrFile)
addrFile.close()
 
del pi
 
addrFile = file(addrFileName)
storedPi = pickle.load(addrFile)
 
for key, pi in storedPi.items():
    print pi

版本2

这个版本是较完整的例子,实现了多个方法。

#!/usr/bin/python
# -*- coding: gbk -*-
# Filename: addressBook.py
 
import cPickle as pickle
import sys
 
class PersonInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return '姓名:%s,年龄:%s' % (self.name, self.age)
 
#读取文件
def readObj(addrFileName):
    addrFile = file(addrFileName)
    storedList = pickle.load(addrFile)
    return storedList
 
#添加或更新
def addOrUpdatePerson(name, age):
    global addrList
    pi = PersonInfo(name, age)
    addrList[name] = pi
 
#保存对象到文件
def save(addrFileName):
    global addrList
    addrFile = file(addrFileName, 'w')
    pickle.dump(addrList, addrFile)
    addrFile.close()
def delPersion(name):
    global addrList
    #if addrList.has_key(name): 可以用这个判断是否有key,但我想练习一下捕捉异常,so...
    try:
        del addrList[name]
    except KeyError:
        print "出错啦,可能已经删除了。\n"
#遍历
def printAll():
    global addrList
    for key, pi in addrList.items():
        print pi
 
#保存对象的文件名
addrFileName = 'address.data'
#map
addrList = readObj(addrFileName)
 
if len(sys.argv) < 2:
    printAll()
elif sys.argv[1].startswith('--'):
    option = sys.argv[1][2:]
    if option == 'version':
        print 'Version 1.0'
    elif option == 'help':
        print '''\
这只是一个简单的地址簿(坑爹啊,哪里有地址了,就一个名字和年龄)
参数:
    --version : 打印版本
    --help : 显示帮助
    -a username age :添加
    -u username age :更新
    -d username : 删除
    '''
    else:
        print '未知参数'
elif sys.argv[1].startswith('-'):
    option = sys.argv[1][1:]
    if option == 'a':#添加
        if len(sys.argv) == 4:
            addOrUpdatePerson(sys.argv[2],sys.argv[3])
    elif option == 'u':#更新
        if len(sys.argv) == 4:
            addOrUpdatePerson(sys.argv[2],sys.argv[3])
    elif option == 'd':#删除
        if len(sys.argv) == 3:
            delPersion(sys.argv[2])
    printAll()
    save(addrFileName)



fatkun

14条评论

这个adress.data文件里的数据格式是什么呢?比如:hello 23
这样的格式是不对的啊。
另外这个文件如果为空会报EOFERROR这个错误,
期望您的回应。

发表评论

电子邮件地址不会被公开。