当前位置:   article > 正文

Python Day15 json和文件操作【初级】_根据上面给出的data.json文件,执行如下操作: (1)编写生产者程序,将json文件数据发

根据上面给出的data.json文件,执行如下操作: (1)编写生产者程序,将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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53236
推荐阅读
相关标签
  

闽ICP备14008679号