day 5 名片管理系统-文件版
1.添加__name__ == '__main__'
if __name__ == "__main__": #添加__name__变量 #调用主函数 main()
2.添加6功能,保存到文件
def save_2_file(): '''完成保存到文件的功能''' f = open("backup.data",'w') f.write(str(card_infors)) #文件只能保存str字符串类型, #TypeError: write() argument must be str, not list f.close()
3.保存文件的内容
vim backup.data #### 第1种,直接把list转换成str存入 文件 [{'qq': 'dfas', 'addr': 'ds', 'name': 'aa', 'age': 'adf'}, {'qq': 'dfas', 'addr': 'fd', 'name': 'b', 'age': 'dsfa'}] ##### 第2种,好看 不推荐 aa,3434,3434,123 bb,43,43,34 c,2334,43,43 #保存的数据文件,不是为了用户查看的,怎么简单怎么来
4.程序执行开始,读取文件
1)版本1:没有数据
def load_infor(): '''完成对文件内数据的加载''' f = open("backup.data","r") card_infor = list(f.read()) #字符串str转换成list列表格式 f.close()
def main(): '''完成对整个程序的控制''' #恢复加载之前的文件内容到程序中 load_infors() # 1.打印功能信息 print_menu()
### 运行结果 ##### python3 08-读取文件.py ************************************************** 名片管理系统 V3 1:添加一个名片 2:删除一个名片 3:修改一个名片 4:查询一个名片 5:显示所有 6:保存 7:退出系统 ************************************************** 请输入你要的功能:5 姓名 年龄 qq号 地址 请输入你要的功能:^Z
2)版本2:global全局变量,eval()
请输入你要的功能:5
姓名 年龄 qq号 地址
aa sfd dsaf df
bb daf fda dfs
def load_infor(): '''完成对文件内数据的加载''' global card_infors #声明全局变量 f = open("backup.data","r") card_infors = eval(f.read()) ## eval能将字符串变成之前的类型 f.close()
5.异常处理:没有数据文件创建,有文件读取
### 没有备份文件程序出错 rm -rf backup.data python3 08-读取文件.py Traceback (most recent call last): File "08-读取文件.py", line 110, in <module> main() File "08-读取文件.py", line 74, in main load_infor() File "08-读取文件.py", line 66, in load_infor f = open("backup.data","r") FileNotFoundError: [Errno 2] No such file or directory: 'backup.data'
def load_infor(): '''完成对文件内数据的加载''' global card_infors try: f = open("backup.data","r") card_infors = eval(f.read()) f.close() except Exception: ###出现异常忽略 pass
6.完整版本
#定义一个新的list列表,用来存储名片 card_infors = [] def print_menu(): """完成打印功能""" print("*"*50) print("\t名片管理系统 V3\t") print("1:添加一个名片") print("2:删除一个名片") print("3:修改一个名片") print("4:查询一个名片") print("5:显示所有") print("6:保存") print("7:退出系统") print("*"*50) def add_new_card_infor(): """完成添加新名片功能""" new_name = input("你要添加的姓名:") new_age = input("你要添加的年龄:") new_qq = input("你要添加的qq:") new_addr = input("你要添加的地址:") #定义1个新的字典dict,用来存储新的名片 new_infor = {} new_infor["name"] = new_name new_infor["age"] = new_age new_infor["qq"] = new_qq new_infor["addr"] = new_addr #将1个字典dict添加到列表list global card_infors card_infors.append(new_infor) #print(card_infors) #for test 测试用的 def find_card_infor(): """完成查询1个名片的功能""" global card_infors find_name = input("请输入你要查询的名字:") flag = 0 #默认 没有查到此人 for tmp in card_infors: if find_name in tmp["name"]: print("%s\t%s\t%s\t%s"%(tmp["name"],tmp["age"],tmp["qq"],tmp["addr"])) flag = 1 #表示查到此人了 break #判断是否找到了 if flag == 0: print("查无此人") def show_card_infor(): """完成显示名片""" global card_infors print("姓名\t年龄\tqq号\t地址") for tmp in card_infors: print("%s\t%s\t%s\t%s"%(tmp["name"],tmp["age"],tmp["qq"],tmp["addr"])) def save_2_file(): '''完成保存到文件的功能''' f = open("backup.data",'w') f.write(str(card_infors)) f.close() def load_infor(): '''完成对文件内数据的加载''' global card_infors try: f = open("backup.data","r") card_infors = eval(f.read()) f.close() except Exception: pass def main(): '''完成对整个程序的控制''' #恢复加载之前的文件内容到程序中 load_infor() # 1.打印功能信息 print_menu() while True: #2.获取用户的输入 num = int(input("请输入你要的功能:")) #3.根据用户的输入,执行相应的功能 if num == 1: add_new_card_infor() elif num == 2: pass elif num == 3: pass elif num == 4: find_card_infor() elif num == 5: show_card_infor() elif num == 6: save_2_file() elif num == 7: break else: print("你输入的有误,请重新输入") print("") if __name__ == "__main__": #调用主函数 main()