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("	名片管理系统 V3	")
    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	%s	%s	%s"%(tmp["name"],tmp["age"],tmp["qq"],tmp["addr"]))
            flag = 1   #表示查到此人了
            break
     #判断是否找到了   
    if flag == 0:
        print("查无此人")

def show_card_infor():
    """完成显示名片"""
    global card_infors
    print("姓名	年龄	qq号	地址")
    for tmp in card_infors:
        print("%s	%s	%s	%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()
原文地址:https://www.cnblogs.com/venicid/p/7898875.html