在最原始的通讯录的基础之上进行了改进
【使用text文本记录数据Python 实例:手机通讯录】使用了text文本记录数据
![使用text文本记录数据 Python 实例:手机通讯录](http://img.gansulong.com/230711/1KH04140-0.png)
文章插图
之后打算再研究一下用怎么写出有界面的通讯录(还是用text文本记录数据),然后再考虑一下用数据库记录数据,单纯只是完成一下期末老师布置的作业····
上篇的通讯录 最简单的实例:手机通讯录
代码直接复制粘贴就可以使用了
import sysimport jsonimport 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 = http://www.kingceram.com/post/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 = http://www.kingceram.com/post/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 = http://www.kingceram.com/post/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 = http://www.kingceram.com/post/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 =http://www.kingceram.com/post/= 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()
- android9 无法使用数据库,使用greenDao操作本地数据库
- 正交表测试用例自动生成工具Allpairs的使用说明
- 挪威海德鲁公司开创了使用绿色氢气生产铝的新时代 铝世界之最
- 哪吒的哥哥惠岸行者木吒使用的武器是什么
- 亚马逊使用中国账户收款,亚马逊欧洲收款账户一定要用公司的吗
- 长板运动安利贴篇一:国产长板使用感受以及选购建议 世界十大长板品牌
- 王允意欲铲除董卓使用的连环计成功了吗
- python中index函数的使用
- 电蚊拍怎么使用灭蚊子 电子灭蚊拍怎么用
- 乳贴使用方法,如何正确使用乳贴?