创建简单的“地址簿”程序。在这个程序中,你可以添加、修改、删除和搜索你的联系人(姓名、电话和地址等等)。这些详细信息应该被保存下来以便以后提取。下面的小程序希望对小伙伴们有点启发。
# -*- coding:utf8 -*-
import cPickle as p
class Test:
f = file(r"D:\python\Python27\testProject\test\myFirstTest.data")
if len(f.read()) == 0:
f2 = file(r"D:\python\Python27\testProject\test\myFirstTest.data", 'w') # 打开文件
personInfos = {} # 定义一个字典用来存放多条个人信息(键使用id,值使用新的字典{姓名:,电话:,地址:})
p.dump(personInfos, f2)
f2.close()
else:
f3=file(r"D:\python\Python27\testProject\test\myFirstTest.data") # 此处多打开一个f3,是因为在使用cPickle时打开的文件与dump和load要在同一级别,不能在if等这种下一个级别(会报错EOFError)
personInfos = p.load(f3) # 取出之前存入的人员信息字典
f3.close()
f.close()
print "人员信息中已存在如下信息:"
print personInfos
def addAddress(self, times): # 调用一次增加一个人(只会生成一个id)入参为一个人想要修改的项的数目
address = {} # 定义一个空的字典,来存放新增的这个人的数据
while True: # 本次循环用来填充address字典
if times == 0: # 根据入参循环向空的字典中增加键值对
break
times = times - 1
key = raw_input("输入键(name/phone/address):")
value = raw_input("输入该键对应的值:")
address[key] = value
newkeyList = self.personInfos.keys() # 取键为列表
length = len(newkeyList) # 取得整个人员字典的长度(键的列表长的),类的类变量personInfos前面要添加self或Test(类名)座位前缀才可以在方法中使用
newkeyList.sort() # 对列表排序
print newkeyList
if length == 0: # 如果人员字典长度为0,则从第0位开始添加数据
self.personInfos[0] = address
else:
self.personInfos[(newkeyList[length - 1]) + 1] = address # 若人员字典长度不为0,则从已有键的下一位添加数据
print self.personInfos
f = file(r"D:\python\Python27\testProject\test\myFirstTest.data", 'w') # 打开文件
p.dump(self.personInfos,f) # 将人员信息字典,作为对象存在myFirstTest.data文件中,本次新生成的personInfos会覆盖原来.data文件中的对象
f.close() # 关闭文件
def delAddress(self, id):
del self.personInfos[id]
print self.personInfos
f = file(r"D:\python\Python27\testProject\test\myFirstTest.data", 'w') # 打开文件
p.dump(self.personInfos, f) # 将人员信息字典,作为对象存在myFirstTest.data文件中,本次新生成的personInfos会覆盖原来.data文件中的对象
f.close() # 关闭文件
def updateAddress(self, id):
print "该id对应人员信息如下:"
print self.personInfos[id]
updatedirc = self.personInfos[id]
length = len(updatedirc.keys())
while True:
if length == 0:
break
length = length-1
key = raw_input("输入想要更新的key:")
value = raw_input("输入想要更新的value:")
updatedirc[key]=value
q = raw_input("是否继续修改?(Y/N)")
if q == 'N':
break
print self.personInfos
f = file(r"D:\python\Python27\testProject\test\myFirstTest.data", 'w') # 打开文件
p.dump(self.personInfos, f) # 将人员信息字典,作为对象存在myFirstTest.data文件中,本次新生成的personInfos会覆盖原来.data文件中的对象
f.close() # 关闭文件
def selectAddress(self,id):
selectdirc = self.personInfos[id]
print selectdirc
def __init__(self):
print "start"
test = Test()
keyWord = raw_input("请输入想要进行的操作(1.addAddress新增;2.delAddress删除;3.updataAddress更新;4.selectAddress查询)")
if keyWord == 'addAddress':
inputStr = raw_input("请输入想要增加的项数目(0-3):")
n=int(inputStr)
test.addAddress(n) # 注意接收的参数类型,此处需要int
elif keyWord == 'delAddress':
id = raw_input("输入想要删除的id:")
test.delAddress(int(id))
elif keyWord == 'updateAddress':
id = raw_input("输入想要修改的id:")
test.updateAddress(int(id))
else:
id = raw_input("输入想要删除的id:")
test.selectAddress(int(id))