day-16文件操作进阶和json数据

正则(处理字符串问题的工具)、文件操作(json数据、学生管理系统)、csv文件、Excel文件、邮件自动化发送、Word、PDF

补充:抛出异常 - 主动让程序崩溃

语法:raise 异常类型
说明:
1raise - 关键字;固定写法
2)异常类型 - 可以是系统提供的异常类型(例如:IndexError、ValueError、KeyError、TypeError等);
            也可以是自定义错误类型(自定义错误类型必须是Exception的子类)
class PasswordError(Exception):
    # 在错误类型中重写__str__方法,可以定制错误提示信息
    def __str__(self):
        return '密码错误'

json数据

  1. 什么是json

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

  2. json数据

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

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

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

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

    import json
    
    # 1)json转python
    """
    json -> Python
    数字  -> 数字
    字符串 -> 字符串(双引号变单引号)
    布尔 -> 布尔(true -> True、false -> False)
    空值 -> 空值(null -> None)
    数组 -> 列表
    字典 -> 字典
    对应的函数:json.loads(json格式字符串) - 将json格式字符串对应的json数据转换成Python数据
    注意:json格式字符串指的是字符串内容是json数据的字符串
    """
    # result = open('files/data.json', encoding='utf-8').read()
    # print(result)
    # result1 = json.loads(result)
    # print(result1)
    
    # result = json.loads("abc")  # 报错,字符串内容是abc,不是一个合法的json数据
    # print(result)
    # result1 = json.loads('"abc"')
    # print(result1, type(result1))  # abc <class 'str'>
    # result1 = json.loads('100')
    # print(result1, type(result1))  # 100 <class 'int'>
    # result1 = json.loads('true')
    # print(result1, type(result1))  # True <class 'bool'>
    # result1 = json.loads('[100, "小明", null, true, false]')
    # print(result1, type(result1))  # [100, '小明', None, True, False] <class 'list'>
    
    
    """# 实例:从网页接口解析数据获取所有英雄的名字
    # 1.获取json数据(从文件读出来、直接做网络请求)
    import requests
    
    res = requests.get(
        url='https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2766570',
        headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
        }
    )
    content = res.text
    # 2.json解析(将json数据转化成对应的Python数据)
    print(content)
    result = json.loads(content)
    print(result)
    for i in result['hero']:
        print(i['name'], i['title'])"""
    # 从文件读出来
    """result = open('hero.json', encoding='utf-8').read()
    result1 = json.loads(result)
    print(result1)
    for i in result1['hero']:
        print(i['name'], i['title'])"""
    # 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': '小明', 'isMaeerd': True})
    print(result, type(result))  # {"a": 10, "20": 30, "name": "\u5c0f\u660e", "isMaeerd": true} <class 'str'>
    
    print(json.dumps('abc'))  # '"abc"'
    

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

import json

"""
=======添加学生=======
请输入学生的姓名:
请输入学生的年龄:
请输入学生的手机号:
请输入学生的专业:
请输入学生的籍贯:
添加成功!
♥1.继续
♥2.退出
请选择:1
请输入学生的姓名:
请输入学生的年龄:
请输入学生的手机号:
请输入学生的专业:
请输入学生的籍贯:
添加成功!
.........
请选择:2
(显示已经添加的所有的学生信息!)
(程序结束)
"""
# 数据存储思路
"""
1.已经添加过的学生需要持久化
2.文件内容的格式:
[
  {
    "name": "小明",
    "age": 18,
    "major": "软件",
    "address": "成都"
  }
  ......
]

"""


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)
        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)
            print('程序结束')
            break


if __name__ == '__main__':
    # add_student()
    # 统计电子专业学生的人数:
    all_students = json.loads(open('files/student.txt', encoding='utf-8').read())
    count = 0
    for i in all_students:
        if i['major'] == '软件':
            count += 1
    print(count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值