文件操作——with open+文件持久化

  1. 流操作

    '''
     with open() as 名字:
        相关的流操作
     只要缩进内容不结束则流也不会结束
    
    '''
    with open('../files/a1.txt', mode='rt') as read_stream:
        # 读取内容
        content = read_stream.read()
        # 创建写的流
        with open('../files/a2.txt', mode='w') as write_stream:
            # 把读取的内容写到write_stream流中
            write_stream.write(content)
        print('内容复制完毕!')
    print('over')
    
    with open('../files/a4.txt') as read_stream:
        pos = read_stream.tell()
        print('pos:', pos)
        content = read_stream.read(4)
        print(content)
        pos = read_stream.tell()  # 获取光标位置
        print('pos:', pos)
        read_stream.seek(10)
        pos = read_stream.tell()
        print('pos:', pos)
        content = read_stream.read()
        print(content)

     

  2. 持久化练习—名片系统

    # 添加名片
    def add_card():
        new_name = input("请输入姓名:")
        new_tel = input("请输入手机号:")
        new_qq = input("请输入QQ:")
        # 查询手机号码是否唯一
        isRecord = search_card(new_tel)
        if isRecord:
            print('此手机号码已被注册!')
        else:
            with open('../files/cards.txt', 'a') as wstream:
                card_str = new_name + ',' + new_tel + ',' + new_qq + '\n'
                wstream.write(card_str)
    
            print('{}成功加入名片系统'.format(new_name))
    
    
    # 根据手机号码去文件中查询
    def search_card(tel):
        # 找到相同的手机号True,否则返回False
        with open('../files/cards.txt') as rstream:
            content = rstream.readline()  # content是一个字符串类型
            while content:  # '' None --->False  '....'---->True
                card_msg = content.split(',')  # [zhangsan,1738829839,8495893]
                if card_msg[1] == tel:
                    return True
                # 继续读取下一行内容
                content = rstream.readline()
        return False
    
    
    def select_card():
        # 读取cards.txt中文件内容
        with open('../files/cards.txt') as rstream:
            content = rstream.read()
        print(content)
    
    
    def del_card(tel):
        isRecord = search_card(tel)
        if isRecord:
            temp_list = []
            # 存在则删除
            with open('../files/cards.txt') as rstream:
                content = rstream.readline()
                while content:
    
                    card_msg = content.split(',')  # [zhangsan,1738829839,8495893]
                    if card_msg[1] != tel:
                        temp_list.append(content)
                    # 继续读取下一行内容
                    content = rstream.readline()
            with open('../files/cards.txt', 'w') as wstream:
                wstream.writelines(temp_list)
    
        else:
            print('不存在此手机号')
    
    
    def update_card(tel):
        # 手机号码是唯一标识不能修改其他可以修改
        isRecord = search_card(tel)
        if isRecord:
            # 声明新的列表用于保存读取的每行信息
            temp_list = []
            # 存在则修改
            with open('../files/cards.txt') as rstream:
                content = rstream.readline()
                while content:
                    card_msg = content.split(',')  # [zhangsan,1738829839,8495893]
                    # 如果手机号码相等
                    if card_msg[1] == tel:
                        # 打印手机号码信息
                        print('手机号码:{}的名片信息如下:'.format(tel))
                        print(content)
                        # 收入更新后信息
                        name = input('请输入要修改的用户名(空为不修改):')
                        qq = input('请输入要修改的QQ(空为不修改):')
                        # 判断name是否为空
                        if name:
                            card_msg[0] = name
                        # 判断qq是否为空
                        if qq:
                            card_msg[2] = qq
                        # 拼接修改后的列表
                        content = ','.join(card_msg)
                    # 将行信息写入列表
                    temp_list.append(content)
                    # 继续读取下一行内容
                    content = rstream.readline()
            with open('../files/cards.txt', 'w') as wstream:
                wstream.writelines(temp_list)
    
        else:
            print('不存在此手机号')
    
    
    # 入口函数
    def main():
        print('-------名片管理系统---------')
        while True:
            choice = input('请选择功能:1.添加名片 2.删除名片 3.修改名片 4.查询名片 5.退出\n')
            if choice == '1':
                # 添加名片
                print('------------添加名片--------------')
                add_card()
            elif choice == '2':
                print('------------删除名片--------------')
                tel = input('输入要删除名片的手机号码:')
                del_card(tel)
            elif choice == '3':
                print('------------修改名片--------------')
                tel = input('输入要删除名片的手机号码:')
                update_card(tel)
            elif choice == '4':
                print('------------查询名片--------------')
                select_card()
            elif choice == '5':
                print('正在退出名片系统....')
                print('退出完毕!')
                break
            else:
                pass
    
    
    main()
    # flag = search_card('15866669999')
    # print(flag)
    

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值