• json数据和文件操作


    json数据和文件操作

    登录注册系统

    数据持久化:

    因为需要下一次运行程序的时候可以使用上一次注册的账号,所以已经注册过的账号需要持久化
    1)确定持久化对象:所有已经注册过的账号和对应密码
    2)创建保存数据的文件
    3)确定文件初始内容:一个用户占一行,每一行内容是’用户名;密码’
    4)需要数据的时候从文件中获取数据
    5)数据发生改变把最新的数据写入文件中
    此处为练习:

    def get_all_user_info():
        '''获取账号文件内容,并且将我呢见内容转换成字典'''
        f = open('files/user.txt', encoding='utf-8')
        all_user = {}
        for line in f.readlines():
            name, pw = line.strip().split(';')
            all_user[name] = pw
        f.close()
        return all_user
    
    
    def register():
        print('~~~~~~正在注册~~~~~~')
        # 1.输入账号和密码
        username = input('请输入账号(不能包含分号):')
        pw = input('请输入密码(不能包含分号):')
        if ';' in username or ';' in pw:
            print('注册失败,账号或者密码不合法')
            return
    
        # 2.判断输入的账号是否已经注册过
        # 1)获取所有已经注册过的账号
        all_user = get_all_user_info()
        if username in all_user:
            print('注册失败,该账号已经存在!')
            return
        # 2)将输入的账号喝密码存储到文件中
        f = open('files/user.txt', 'a', encoding='utf-8')
        f.write(f'{username};{pw}\n')
        print('注册成功!')
    
    
    def login():
        print('~~~~~~~~~正在登录~~~~~~~~~~')
        # 1.输入账号和密码
        username = input('请输入账号:')
        pw = input('请输入密码:')
        # 2.判断登录是否成功
        # 1)账号是否已经注册
        all_user = get_all_user_info()
        if username not in all_user:
            print('登录失败!该账号没有注册!')
            return
        # 2)密码是否正确
        if all_user[username] != pw:
            print('登录失败!密码不对!')
        else:
            print('登录成功!')
    
    
    def welcome():
        print('=======================')
        print('❀1.登录')
        print('❀2.注册')
        print('=======================')
        value = input('☺请选择:')
        if value == '1':
            login()
        elif value == '2':
            register()
        else:
            print('输入有误!')
    
    
    if __name__ == '__main__':
        welcome()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    json数据

    1.什么是json

    json和xml都是一种通用的数据格式,可以用于不同编程语言之间的数据交流。
    json相对xml更小更轻,传输速度更快;xml相对于json更安全。

    2.json数据

    json数据格式的要求:一个json有且只有一个数据;唯一的数据必须是json支持的类型的数据。
    json支持的类型:
    1)数字:包括整数和小数,表示的时候是直接写:100,23.5, -3.14,3.14
    2)字符串:用双引号(“”)引起来的数据:“abc”,“小明”
    3)布尔:只有true和false
    4)空值: null
    5)数组:相当于python的列表:[数据1、数据2、…]
    6)字典:相当于python的字典,但是键只能是字符串:{键1:值1,键2:值2,… }

    3.python数据和json数据之间的相互转换

    python中提供了json模块专门用来处理python中的json数据

    import json
    
    • 1

    1)json转python
    json -> python
    数字 数字
    字符串 字符串(双引号变单引号)
    布尔 布尔(ture -> Ture;false -> False)
    空值 空值(null -> None)
    数组 列表
    字典 字典
    对应的函数:
    json.loads(json格式字符串) - 将json格式字符串对应的json数据转换成Python数据
    注意:json格式字符串指的是字符串内容是json数据的字符串
    data.json文件中为:

    {
      "name": "xiaoming",
      "age": 18,
      "gender": "男",
      "isMarried": false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    content = open('data.json', encoding='utf-8').read()
    result = json.loads(content)
    print(result)  # {'name': 'xiaoming', 'age': 18, 'gender': '男', 'isMarried': False}
    
    • 1
    • 2
    • 3
    # result = json.loads("abc")  # 报错,字符串内容是abc,不是一个合法的json数据
    result = json.loads('"abc"')    # "abc"  ->  'abc'
    print(result, type(result))  # abc 
    
    • 1
    • 2
    • 3
    result = json.loads('100')     # 100 -> 100
    print(result, type(result))   # 100 
    
    • 1
    • 2
    result = json.loads('true')   # true -> True
    print(result, type(result))   # True 
    
    • 1
    • 2
    result = json.loads('[100, "小明", null, true, false]')
    print(result, type(result))   # [100, '小明', None, True, False] 
    
    • 1
    • 2

    2)python转json
    python -> json
    int、float 数字
    str 字符串(单引号会变成双引号)
    bool True -> true;False -> false
    None null
    列表、元组 数组
    字典 字典
    对应的函数:
    json.dumps(Python数据) - 将指定Python数据转换成对应的json格式字符串

    json.dumps(100)        # '100'
    json.dumps('abc')      # '"abc"'
    json.dumps(True)      # 'true'
    result = json.dumps({'a': 10, 20: 30, 'name': 'xiaoming', 'isMarred': True})
    print(result, type(result))    # {"a": 10, "20": 30, "name": "xiaoming", "isMarred": true} 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    json实际应用

    示例:学生管理系统添加学生
    =添加学生==
    请输入学生姓名:
    请输入学生年龄:
    请输入学生手机号:
    请输入学生专业:
    请输入学生籍贯:
    添加成功!
    ❤1.继续
    ❤2.退出
    请选择:
    数据存储思路
    1.已经添加过的所有学生需要持久化
    2.文件内容格式:
    [{“name”: “小明”, “age”: 18, “major”:“电子信息”, “address”: “成都”}]

    import json
    
    
    def add_student():
        while True:
            # 1. 输入学生信息
            print('=========添加学生==========')
            name = input('请输入学生姓名:')
            age = input('请输入学生的年龄:')
            tel = input('请输入学生的电话:')
            major = input('请输入学生的专业:')
            address = input('请输入学生的籍贯:')
    
            # 2. 保存学生信息
            content = open('files/student.txt', encoding='utf-8').read()        # '[]'
            all_students = json.loads(content)          # type: list
    
            # [{}]
            all_students.append({'name': name, 'age': age, 'tel': tel, 'major': major, 'address': address})
            open('files/student.txt', 'w', encoding='utf-8').write(json.dumps(all_students))
    
            print('添加成功!')
            # 3. 提示继续或者退出
            print('❤️1. 继续')
            print('❤️2. 退出')
            value = input('请选择:')
            if value == '1':
                pass
            else:
                # 打印已经添加过的所有的学生信息
                print(all_students)
                break
    
    
    # if __name__ == '__main__':
    #     # add_student()
    #
    #     # 统计电子专业学生的人数:
    #     all_student = json.loads(open('files/student.txt', encoding='utf-8').read())
    #     count = 0
    #     for x in all_student:
    #         if x['major'] == '电子':
    #             count += 1
    #     print(count)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    Ubuntu的EFI分区无法删除
    电脑上的小白系统没内存怎么办?
    带您了解昇腾模型压缩工具
    springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表
    SDN系统方法 | 8. 网络虚拟化
    如何实现通过Leaflet加载dwg格式的CAD图
    Java 流(Stream)、文件(File)和IO
    在不使用js在情况下只用css实现瀑布流效果
    SQL执行计划生成
    提高APP安全性的必备加固手段——深度解析代码混淆技术
  • 原文地址:https://blog.csdn.net/shasha_bucou_sha/article/details/126254534