• Python Day15 json和文件操作【初级】


    Day15 json和文件操作

    1. json数据

    1.1 什么是json

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

    1.2 json数据格式

    json数据格式的要求:一个json有且只有一个数据;并且唯一的这个数据必须是json支持的类型的数据。

    json支持的类型有哪些:
    1)数字:包括整数和小数,表示的时候直接写:100、23、0.3、-65、3e4
    2)字符串:用双引号引起来的数据:“abc”、“小明”
    3)布尔:只有 true 和 false 两个值
    4)空值:null
    5)数组:相当于python的列表:[数据1, 数据2, 数据3, …]
    6)字典:相当于python的字典,但是键只能是字符串:{键1: 值1, 键2: 值2, 键3: 值3, …}

    1.3 python数据和json数据之间转换

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

    1)json 转 python
    json ——> python
    数字 ——> 数字
    字符串 ——> 字符串(双引号变单引号)
    布尔 ——> 布尔(true -> True、false -> False)
    空值 ——> 空值(null -> None)
    数组 ——> 列表
    字典 ——> 字典

    对应的函数:
    json.loads(json格式字符串) —— 将json格式字符串对应的json数据转换成对应的python数据

    注意:json格式字符串指的是字符串内容是json数据的字符串

    content = open('data.json', encoding='utf-8').read()
    result = json.loads(content)
    print(result)
    
    # result = json.loads("abc")        # 报错,字符串内容是 abc, 不是一个合法的json数据
    result = json.loads('"abc"')        # "abc"  -> 'abc'
    print(result, type(result))
    
    result = json.loads('100')          # 100  -> 100
    print(result, type(result))
    
    result = json.loads('true')         # true  ->  True
    print(result, type(result))
    
    result = json.loads('[100, "小明", null, true, false]')
    print(result, type(result))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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
    • 6

    2. json实际应用

    2.1 示例:学生管理系统添加学生

    '''
    =========添加学生==========
    请输入学生姓名:stu1
    请输入学生的年龄:19
    请输入学生的手机号:110
    请输入学生的专业:电子信息
    请输入学生的籍贯:重庆
    添加成功!
    ❤️1. 继续
    ❤️2. 退出
    请选择:1
    
    =========添加学生==========
    请输入学生姓名:stu2
    请输入学生的年龄22
    请输入学生的手机号:3332
    请输入学生的专业:电子信息
    请输入学生的籍贯:重庆
    添加成功!
    ❤️1. 继续
    ❤️2. 退出
    请选择:1
    
    ....
    
    =========添加学生==========
    请输入学生姓名:stu2
    请输入学生的年龄:22
    请输入学生的手机号:3332
    请输入学生的专业:电子信息
    请输入学生的籍贯:重庆
    添加成功!
    ❤️1. 继续
    ❤️2. 退出
    请选择:2
    (显示已经添加的所有的学生信息!)
    (程序结束)
    
    '''
    
    • 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

    数据存储思维

    1.已经添加过的所有学生需要持久化
    2.文件内容格式:
    [  
        {"name": "小明", "age": 18, "major":"电子信息", "address": "成都"},
        ...
    ]
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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 i in all_student:
            if i['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

    2.1 补充:抛出异常

    '''
    语法:raise 异常类型
    
    说明:
    1)raise  -  关键字;固定写法
    2)异常类型  -  可以是系统提供的异常类型(列如:IndexError、ValueError、KeyError、TypeError等);
                   也可以是自定义类型(自定义错误类型必须是Exception的子类)
                   
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    class PasswordError(Exception):
        # 在错误类型中重写__str__方法,可以定制错误信息
        def __str__(self):
            return '密码输入有误!'
    
    
    def input_pswd():
        pw = input('请输入您密码:')
        if len(pw) < 8:
            raise PasswordError
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    详解设计模式:外观模式
    36、ARF Artistic Radiance Fields
    怎么把图片转换成表格?分享三个简单方法给你
    22/8/3-杭电多校5
    var、let、const特点总结
    网络安全(黑客)自学
    华为OD机试 - 运维日志排序(Java 2023 B卷 100分)
    Axios使用固定session发送http请求
    Linux应用开发 - 多线程编程
    场馆如何智能化升级?
  • 原文地址:https://blog.csdn.net/qq_67780151/article/details/126232573