#!/usr/bin/python
#coding=UTF-8
# FileName:address.py
# Python地址簿
import cPickle as p;
import os;
import sys;
class Address:
'''Python地址簿'''
# 构造函数
def __init__(self):
self.dataFileName = 'address.data';
self.dataPath = os.getcwd() + os.sep;
handle = file(self.dataPath + self.dataFileName, 'w');
try:
self.peopleList = p.load(handle);
except:
print '%s is empty.initializing...'%(self.dataFileName);
self.peopleList = {};
handle.close();
###
# 添加一个地址簿
# @access public
# @author zhaoyingnan 2016-03-01 10:10:46
# @param string username 人名
# @param string marks 备注
# @param string mobile 手机号码
# @param string email 邮箱
# @return mix
# @note
###
def addPeople(self, username, marks, mobile, email):
'''添加一个地址簿'''
if self.peopleList.get(username, 404) == 404:
newPeople = {'username':username, 'marks':marks, 'mobile':mobile, 'email':email};
self.peopleList[username] = newPeople;
else:
'already exist.'; ###
# 删除一个地址簿
# @access public
# @author zhaoyingnan 2016-03-01 10:16
# @param string username 人名
# @return mix
# @note
###
def delPeople(self, username):
if self.peopleList.get(username, 404) == 404:
print '%s non-existent.'%(username);
else:
del self.peopleList[username];
print 'ok.'; ###
# 修改一个地址簿
# @access public
# @author zhaoyingnan 2016-03-01 10:18
# @param string username 人名
# @param string index 索引(username/marks/mobile/email)
# @param string value 索引对应的值
# @return mix
# @note
###
def updatePeople(self, username, index, value):
if self.peopleList.get(username, 404) == 404:
print '%s non-existent.'%(username);
#sys.exit('%s non-existent!'%(username));
else:
self.peopleList[username][index] = value; ###
# 获取列表
# @access public
# @author zhaoyingnan 2016-03-01 10:21
# @return string
# @note
###
def getPeople(self):
if len(self.peopleList) > 0:
for username,arList in self.peopleList.items():
print '-------------------------------';
print '\t%s\t'%(username);
for key,value in arList.items():
print '%s\t%s'%(key, value);
print '-------------------------------';
else:
print '%s is empty.'%(self.dataFileName); # 将地址播存储在文件中
def __del__(self):
handle = file(self.dataPath + self.dataFileName, 'w');
p.dump(self.peopleList, handle);
handle.close(); address = Address();
address.addPeople('lee', 'LiHongBin', 18911937250, '791520450@qq.com');
address.addPeople('zhaoyn', 'ZhaoYingNan', 15932279586, '409586363@qq.com');
address.addPeople('Mr.Zhu', 'ZhuXiaoHuan', 13303028786, '12802390939@qq.com');
address.delPeople('Mr.Zhu');
address.updatePeople('Liu', 'marks', 'LiuQing');
address.updatePeople('zhaoyn', 'marks', 'Mr.Zhao');
address.getPeople();

Python地址簿的更多相关文章

  1. [python]小练习__创建你自己的命令行 地址簿 程序

    创建你自己的命令行 地址簿 程序. 在这个程序中,你可以添加.修改.删除和搜索你的联系人(朋友.家人和同事等等)以及它们的信息(诸如电子邮件地址和/或电话号码). 这些详细信息应该被保存下来以便以后提 ...

  2. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)

    [引子] 在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离. 本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离. [概览] 1.界面 ...

  3. 供应商和管理员查看供应商地址簿信息SQL

    --管理员查看地址簿 SELECT hps.party_site_id, hps.party_site_name AS address_name, 'CURRENT' AS status, hzl.a ...

  4. iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在iOS9的SDK中我们会发现原来地址簿权限查询,获取以及创建 ...

  5. 网络协议 16 - DNS 协议:网络世界的地址簿

    [前五篇]系列文章传送门: 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议:常用而不简单 网络协议 13 - HTTPS 协议:加密路上无尽头 网络 ...

  6. Derek解读Bytom源码-P2P网络 地址簿

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  7. foxmail地址簿导入thunderbird的乱码问题 (转载)

    转自:http://blog.csdn.net/gexueyuan/article/details/9032595 由于foxmail的地址簿格式和thunderbird的格式不一样,另外也存在编码问 ...

  8. iOS 获取联系人,并调用系统地址簿UI

    1.加入 AddressBook库 推断授权状态 -(bool)checkAddressBookAuthorizationStatus { //取得授权状态 ABAuthorizationStatus ...

  9. python 03

    数据结构 在 python 中有4种内建数据结构, 列表, 元组, 字典和集合. 列表 list 有序项目的数据结构, 类似数组, 是对象. 列表用中括号中用逗号分隔的项目定义.例如 ['apple' ...

随机推荐

  1. 分布式环境下rabbitmq发布与订阅端

    假设rabbitmq配置了集群,且客户端连接rabbitmq-server通过lvs实现HA但一般情况下不建议做LB.在分布式系统的环境下,由于节点的非预知性,使用spring amqp模板进行配置不 ...

  2. 初学File类

    对File类的基本方法的理解 今天刚开始学了File类 一开始看思想编程看得迷迷糊糊的,之后受不了了,直接去看API文档 归纳: File->java.util File类的主要方法: 构造方法 ...

  3. texrecon进行纹理映射

    使用texrecon进行纹理映射: 1)       跳转到mesh所在目录 cd meshdir 2)       参数 a)         texrecon.exe b)         bun ...

  4. Wowza® Media Systems 使用配置手册。

    准备 1,先安装Java:http://www.java.com/zh_CN/ 2,官网下载安装:http://www.wowza.com/pricing/installer ,需要输入用户名邮箱等信 ...

  5. Draggabilly – 轻松实现拖放功能(Drag & Drop)

    Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 Req ...

  6. HTML5 video 和 audio

    video 用于在HTML或者XHTML文档中嵌入视频内容 使用 video 元素至少要提供两种视频格式的文件:OGG 和 MP4 OGG:采用 Theora 视频格式和 Vorbis 音频解码器 ( ...

  7. document.querySelector和querySelectorAll方法

    querySelector和querySelectorAll是W3C提供的新的查询接口,其主要特点如下: 1.querySelector只返回匹配的第一个元素,如果没有匹配项,返回null.  2.q ...

  8. CSS3绘制六边形

    因为很简单,所以先总结一下:使用CSS3绘制六边形主要使用伪类:before和:after在源元素之前和之后再绘制两个元素,并利用css3的边框样式,将这两个元素变成三角形放置在源元素的两端即可. ( ...

  9. ORA-00054:资源正忙,但指定以nowait方式

    PL/SQL执行SQL脚本文件,报错如下: 百度寻找答案,认为是被锁了. select session_id from v$locked_object; 结果没有任何数据.   后来把PL/SQL关闭 ...

  10. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...