在最原始的通讯录的基础之上进行了改进
使用了text文本记录数据
之后打算再研究一下用tkinter怎么写出有界面的通讯录(还是用text文本记录数据),然后再考虑一下用pymysql数据库记录数据,单纯只是完成一下期末老师布置的作业····
上篇的通讯录Python 最简单的实例:手机通讯录

代码直接复制粘贴就可以使用了

import sys
import json
import osclass TelephoneBook:def show_menu(self):  # 用于界面展示print("*" * 20)print("欢迎使用[通讯录] V1.0")print("1.添加联系人")print("2.查看通讯录")print("3.删除联系人")print("4.修改联系人")print("5.查找联系人")print("6.退出")print("*" * 20)# 1-添加联系人def add_info(self):name_str = input("请输入姓名:")phone_num = input("请输入手机号:")mail_adr = input("请输入邮箱:")adr_str = input("请输入地址:")# 将数据封装到字典中card_dict = {"姓名": name_str, "手机号": phone_num,"邮箱": mail_adr,"地址": adr_str}f = open("通讯录.txt", mode='a+', encoding='utf-8')# 将字典转换为str,然后再使用write()写入到通讯录的文本文件中f.write(str(card_dict) + '\n')f.close()print(f"成功添加{name_str}为联系人")# 2-显示所有联系人信息def show_info(self):file = open("通讯录.txt", mode='r', encoding='utf-8')# 如果通讯录.txt文件不为空时,执行下面代码if len(file.read()) != 0:# 保证每次从开始位置读取file.seek(0, 0)# 读取通讯录.txt文件中的内容file_data = file.read()# 对字符串进行分隔split_info = file_data.split('\n')# 删除多余的字符串split_info.remove(split_info[len(split_info) - 1])name_li = []       # 用于存储联系人姓名的列表all_info_li = []   # 用于存储所有信息的列表for i in split_info:# 将单引号替换为双引号dict_info = json.loads(i.replace("\'", '\"'))all_info_li.append(dict_info)# 获取所有联系人的姓名name_li.append(dict_info['姓名'])for person_info in all_info_li:print('--*' * 17)print(person_info)print('--*' * 17+'\n')else:print("通讯录为空")# 3-删除联系人信息def del_info(self):file = open("通讯录.txt", mode='r+', encoding='utf-8')# 如果通讯录.txt文件不为空时,执行下面代码if len(file.read()) != 0:# 保证每次从开始位置读取file.seek(0, 0)# 读取通讯录.txt文件中的内容file_data = file.read()# 对字符串进行分隔split_info = file_data.split('\n')# 删除多余的字符串split_info.remove(split_info[len(split_info) - 1])name = input("请输入要删除的联系人姓名:")name_li = []  # 用于存储联系人姓名的列表all_info_li = []  # 用于存储所有信息的列表for i in split_info:# 将单引号替换为双引号dict_info = json.loads(i.replace("\'", '\"'))all_info_li.append(dict_info)# 获取所有联系人的姓名name_li.append(dict_info['姓名'])if name in name_li:通讯录_copy = open('通讯录_copy.txt', mode='w', encoding="utf-8")for person_info in all_info_li:if name not in str(person_info):通讯录_copy.write(str(person_info)+'\n')通讯录_copy.close()file.close()os.rename('通讯录.txt', '通讯录_del.txt')os.rename('通讯录_copy.txt', '通讯录.txt')os.remove('通讯录_del.txt')print('删除成功!')else:print('联系人不存在')else:print("通讯录为空")# 4-更新联系人信息def update_info(self):file = open("通讯录.txt", mode='r+', encoding='utf-8')# 如果通讯录.txt文件不为空时,执行下面代码if len(file.read()) != 0:# 保证每次从开始位置读取file.seek(0, 0)# 读取通讯录.txt文件中的内容file_data = file.read()# 对字符串进行分隔split_info = file_data.split('\n')# 删除多余的字符串split_info.remove(split_info[len(split_info) - 1])name = input("请输入要更新的联系人姓名:")name_li = []  # 用于存储联系人姓名的列表all_info_li = []  # 用于存储所有信息的列表for i in split_info:# 将单引号替换为双引号dict_info = json.loads(i.replace("\'", '\"'))all_info_li.append(dict_info)# 获取所有联系人的姓名name_li.append(dict_info['姓名'])if name in name_li:通讯录_copy = open('通讯录_copy.txt', mode='w', encoding="utf-8")name_new = input("请输入新的姓名:")phone_new = input("请输入新的手机号:")mail_new = input("请输入新的邮箱:")adr_new = input("请输入新的地址:")# 将数据封装到字典中card_dict = {"姓名": name_new, "手机号": phone_new,"邮箱": mail_new, "地址": adr_new}for person_info in all_info_li:if name in str(person_info):person_info = str(card_dict)通讯录_copy.write(str(person_info) + '\n')通讯录_copy.close()file.close()os.rename('通讯录.txt', '通讯录_del.txt')os.rename('通讯录_copy.txt', '通讯录.txt')os.remove('通讯录_del.txt')print('更新成功!')else:print('联系人不存在')else:print("通讯录为空")# 5-查找相关联系人信息def find_info(self):file = open("通讯录.txt", mode='r', encoding='utf-8')# 如果通讯录.txt文件不为空时,执行下面代码if len(file.read()) != 0:# 保证每次从开始位置读取file.seek(0, 0)# 读取通讯录.txt文件中的内容file_data = file.read()# 对字符串进行分隔split_info = file_data.split('\n')# 删除多余的字符串split_info.remove(split_info[len(split_info) - 1])name = input("请输入要查询的姓名:")name_li = []       # 用于存储联系人姓名的列表all_info_li = []   # 用于存储所有信息的列表for i in split_info:# 将单引号替换为双引号dict_info = json.loads(i.replace("\'", '\"'))all_info_li.append(dict_info)# 获取所有联系人的姓名name_li.append(dict_info['姓名'])if name in name_li:for person_info in all_info_li:for title_key, name_value in person_info.items():if name_value == name:#找到匹配的名字并输出相关信息for title, info_value in person_info.items():print(title + ":" + info_value)else:print('联系人不存在')else:print("通讯录为空")# 主函数def main(self):while True:self.show_menu()action_str = input("请选择操作功能:")  # 判断用户输入的功能指令if action_str.isdigit() is True:if int(action_str) == 1:self.add_info()elif int(action_str) == 2:self.show_info()elif int(action_str) == 3:self.del_info()elif int(action_str) == 4:self.update_info()elif int(action_str) == 5:self.find_info()elif int(action_str) == 6:sys.exit()else:print('请输入正确的指令')#执行主程序
if __name__ == '__main__':tb = TelephoneBook()tb.main()

Python 实例:手机通讯录(使用text文本记录数据)相关推荐

  1. Python 导出手机通讯录文件 VCF 文件中的手机号码

    文章目录 Python 导出手机通讯录文件 VCF 文件中的手机号码 1.代码 Python 导出手机通讯录文件 VCF 文件中的手机号码 1.代码 if __name__ == '__main__' ...

  2. python导入txt为dataframe-python读取文本中数据并转化为DataFrame的实例

    在技术问答中看到一个这样的问题,感觉相对比较常见,就单开一篇文章写下来. 从纯文本格式文件 "file_in"中读取数据,格式如下: 需要输出成"file_out&quo ...

  3. python实现手机通讯录和学生信息管理系统(4种方法)

    1.手机通讯录: 通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式.邮箱.地址等信息,也可以在其中新增联系人,或修改.删除联 ...

  4. python制作手机通讯录功能

    模拟手机通讯录功能 个人练习,仅供参考 print('-' * 20) print('欢迎使用通讯录:\n1.添加联系人\n2.查看通讯录\n3.删除联系人\n4.修改联系人信息\n5.查找联系人\n ...

  5. python实现手机通讯录_python实现手机通讯录搜索功能

    # -*- coding:utf-8 -*- # 练习2: # 模拟手机通讯录搜索功能 class PERSON(object): def __init__(self): self.name_list ...

  6. python实现手机通讯录_生成CVS格式通讯录的Python实现

    Post Views: 4 () 通讯录原格式 张三 1778****931 王XX 1812****851 谢XX 1822****555 李XX 1522****563 叶XX 1501****7 ...

  7. python实现手机通讯录_python+uiautomator2实现需求:从通讯录添加手机号码作为SOS紧急号码...

    # 实现需求:从通讯录添加手机号码,若存在旧的SOS号码,先删除再添加,若通讯录中没有号码,需先新建. import uiautomator2as u2 from timeimport sleep i ...

  8. 利用python解析手机通讯录

    2019独角兽企业重金招聘Python工程师标准>>> 最新在处理手机通信录的时候,导出的手机通信录的文件VCF文件的内容如下: BEGIN:VCARD VERSION:3.0 N: ...

  9. python实现手机通讯录_Python实现命令行通讯录

    1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...

最新文章

  1. [ NOIP 2008 ] TG
  2. 31.4. Open Source Development for the D Programming Language
  3. 微会动微信现场互动:如何通过7步分析法建立用户视角?
  4. JAVA编写提示用户输入投资额_java(计算银行存款总额(要求输入错误时,提示重新输入))...
  5. 在网页设计中,引导页是所有页面中的重中之重,引导浏览者很快进入各栏目页面,是一个网站的灵魂所在。
  6. pythondjango是干什么的_python django框架是什么?怎么使用?
  7. WordPress插件 AffiliateWP 电商联盟推广插件汉化/中文版[更新至v1.8]
  8. 一文读懂: 什么是用户故事?What is User Stories?
  9. Win10设置热点IP
  10. python 爬虫。爬取小说--斗破苍穹
  11. 解决 Missing GL version
  12. 函数逼近和曲线拟合、插值
  13. 软件工程实训——点歌管理系统开发记录
  14. RK3399 focaltech敦泰触摸屏移植调试
  15. 胸部CT影像分析(笔记)
  16. CART算法对比理解
  17. 《SSH框架》---SSH框架与框架
  18. 【Python】常用模块安装命令
  19. c语言中 %d与%2d与%02d的区别在哪里
  20. 上海交通大学MBA常见问题解答

热门文章

  1. navicat还原mysql备份数据时,部分表无数据
  2. goinception办理
  3. java开发mac pro_U1S1,这个提取人声/歌曲伴奏的小工具很好用 Neural Mix | Mac软件天堂...
  4. 13.3寸_Wifi标签功耗电流计算-单面屏幕-1.8V的Flash测试
  5. css持续淡入淡出,CSS如何使元素淡入然后淡出?
  6. PTA 7-124 A+B 输入输出练习 (I) ------新手必看!!
  7. CSS选择器优先级及CSS的高级选择器
  8. AI绘画生成器推荐AI绘画自动生成器有哪些?
  9. 选购移动电源主要看哪些方面 如何挑选移动电源
  10. MP4视频文件修复软件,恢复失去的珍贵视频