美文网首页
2018-10-15 Day 12 json文件和异常捕获

2018-10-15 Day 12 json文件和异常捕获

作者: EryangZ | 来源:发表于2018-10-15 17:44 被阅读0次

    1. recode

    1. 容器类型
      列表: [元素];可变的、有序;任意类型;增删改查
      字典: {键值对};可变的、无序;key是唯一的不可变的,value任意类型;增删改查
      元组: (元素,);不可变的,有序的;任意类型;查
    x, y = (10, 20)
    tuple1 = 10, 20, 30
    x, *y = (1, 2, 3, 4, 5, 6)
    tuple_single = (1,) / 1,
    

    集合: {元素};可变的,无序的,不重复的;不可变的并且唯一;数学集合运算;并集,交集,补集,差集

    迭代器: 无字面量;可变(只能取出);只能通过next取值,取出后,迭代器中值就不存在了

    1. 函数
      函数的声明
      函数的调用:
      a. 调用过程
      b.调用函数就是为了执行函数体,获取返回值
      不定长参数写法: *args, **kwargs 第一个返元组,第二个返回字典
      匿名函数:lambda 参数列表: 返回值
      函数作为变量: 声明函数就是在声明一个类型是function的变量
      变量的作用域: 全局变量和局部变量
      递归函数: 自己调用自己(调用函数的过程是个压栈的过程,递归函数会不断的压栈,会在一段时间内消耗和
      释放巨量内存,消耗cpu)
      a. 找临界值(结束循环)
      b. 找关系(找f(n)和f(n-1)的关系)
      c. 用f(n-1)实现f(n)的功能

    生成式:
    (值1, 值2 for 变量 in 序列 条件语句)
    生成器: 有yield关键字的函数:

    1. 文件操作
      打开文件 --> 读写文件 --> 关闭文件
      open(文件的路径, 打开方式, encoding=编码方式) ---> 返回被打开的文件对应的文件对象
      ./, ../, .../

    r/rb --> 读
    w/wb --> 写(完全覆盖原来内容)
    a --> 写(在后面添加)

    utf-8: 支持中文
    gbk: 只支持英文

    文件.close()

    2. 文件操作

    补充:
    打开文件的时候,以读的方式打开,文件不存在就报错
    以写的方式打开,如果文件不存在,会去自动创建对应的文件

    打开文件和关闭文件的缩写
    with open(文件路径, 打开方式, encoding=编码方式) as 文件对象:
    文件操作相关的代码
    说明: 打开文件,执行完文件操作相关的代码,实现后会自动关闭文件

    # open("./files/aaa.txt", "r")  报错
    # open("./files/aaa.txt", "w")
    
    
    with open("./aaa.txt", "w", encoding="utf-8") as f1:
        f1.write("床前明月光\n,疑是地上霜")
    
    1. 二进制文件的读写
      常见的二进制文件: 音频文件、视频文件、图片、压缩包等都是属于二进制人间
      注意: 二进制文件不能设置文件编码方式,不能给encoding赋值

    bytes --> 字节,专门表示二进制的类型

    with open("./duck.png", "rb") as f2:
        content = f2.read()
        print(type(content), content)
    
    with open("./new.jpg", "wb") as f3:
        f3.write(content)
    

    3. json文件

    json是一种特定格式的数据, 主要用来在互联网上做文本数据传输

    json数据本身是文本数据, json文件就是后缀是.json的文件, 并且文件内容必须满足json格式,如果不满足,文件本身就会报错

    1. json格式
      a. 一个json只能是一条数据
      b. json中的数据必须是json对应的数据类型
    json数据类型:
        a. 数字类型(number) --> 所有的数据,包含整数、小数
        b. 字符串类型(string) --> 用双引号括起来的数据, 例如: "abc" "hello python"
        c. 容器类型
            a. 数据(array) --> 相当于python中的列表, 例如: ["abc", 1, 2, "cc"] 
            b. 字典(dictionary) --> 相当于python当中的字典, 例如: {"key": value, "b": 20}
            c. 布尔(bool) --> true / false 小写
            d. null --> 相当于None, 用来表示空
    
    1. pthon对json的支持
      Python中专门提供了一个json模块,用来处理json数据

    load(json文件对象): ---> 将json文件中读出来,转换为Python格式对应的数据类型
    dump(写入的内容, json文件路径) ---> 将指定的内容以json格式写入到指定的json文件中

    loads(json格式的字符串) ---> 将字符串内容是json数据的字符串转换成python对应的数据内容
    dumps(内容) ---> 将指定的内容转换成json格式的字符串

    json转python
    json python
    数字 int/float
    字符串 str
    数组 list
    字典 dict
    true/false True/False
    null None

    import json
    content = json.loads("100")
    print(content, type(content))
    
    content2 = json.loads('"abc"')
    print(content2, type(content2))
    
    content3 = json.loads('[12, 12.5, "name", [1, "2a"]]')
    print(content3, type(content3))
    
    content4 = json.loads('{"a": true, "b": 5, "c": null}')
    print(content4, type(content4))
    
    1. load用法

    load(文件对象) ---> 将文件对象中的内容转换成Python数据类型的数据
    要求:文件中的内容必须是json格式的数据

    with open('./text2.json') as f:
        print(json.load(f))
    
    
    python      json
    int/float   数字
    str         字符串(单引号变为双引号)
    True/False  true/false
    dict        字典
    列表/集合    数组
    None        null
    
    1. dumps
    dumps(内容) ---> 内容是Python数据,返回值是一个字符串,并且字符串的内容是满足json格式的
    
    str1 = json.dumps({"a": 12, "b": True, "c": None, "d": 12.5})
    print(str1, type(str1))
    
    str2 = json.dumps([1, 2.5, True, 'a', None])
    print(str2, type(str2))
    
    1. dump

    dump(内容, 文件对象) --> 将内容以json格式写入文件中

    with open("./text2.json", "w") as f:
        json.dump({"wo": "ey", "我是json": "哈哈", "a": 1, "b": 2, "c": True, "d": None}, f)
    

    4. 文件的使用

    数据本地化的过程:
    使用数据的时候从本地文件中去取数据,修改完数据后,要使用新的数据取更新本地文件中的内容
    本地文件: 手动创建一个文件或者以写的方式自动创建一个文件

    # 学生管理系统
    # 1. 添加学生,要求之前添加过的学生,下次执行程序的时候还存在
    # 2. 显示学生信息
    """
    学生管理数据类型 ---> [学生1, 学生2, 学生3]  {"学号1": 学生, "学号2": 学生2}
    {"user": "name", "all_stu": [学生信息]/{学生信息}} 
    """
    # 保存所有学生(容器)
    import json
    with open('./stu_json.json') as f:
        all_stu = json.load(f)
    
    
    def add_stu():
        """
        添加学生
        """
        while True:
            name = input("请输入学生的姓名: ")
            age = int(input("请输入学生的年龄: "))
            tel = int(input("请输入学生的电话: "))
            # 创建学生对应的字典
            student = {"name": name, "age": age, "tel": tel}
            # 将学生添加到容器中
            all_stu.append(student)
            # 将新的数据更新到本地文件中
            with open('./stu_json.json', "w") as f:
                json.dump(all_stu, f)
    
            print("添加成功")
            print("1. 继续添加")
            print("2. 返回上一层")
            input_value = int(input("请选择: "))
            if input_value == 1:
                continue
            else:
                break   # 或者写return
    
    
    def show_stu():
        for student in all_stu:
            print(student)
    
    
    while True:
        print("=================================")
        print("1. 添加学生")
        print("2. 显示学生信息")
        print("3. 退出")
        input_value = int(input("请选择: "))
        if input_value == 1:
            add_stu()
        elif input_value == 2:
            show_stu()
        else:
            print("退出成功")
            break
    
    # 将新的数据更新到本地文件中
    with open('./stu_json.json', "w") as f:
        json.dump(all_stu)
    
    
    
    # 在程序中声明一个变量,用来保存当前程序执行的次数
    import json
    with open('./count_json.json', encoding="utf-8") as f:
        num = json.load(f)
    num += 1
    with open('./count_json.json', "w", encoding="utf-8") as f:
        json.dump(num, f)
    print(num)
    

    5. 异常捕获

    # ====================抛出异常=================
    
    raise  异常类型
    
    异常类型要求: Exception类的子类
    
    value = int(input("请输入一个偶数: "))
    if value & 1:
        raise ValueError
    else:
        print("还活着")
    
    
    # =================异常捕获====================
    # 1. 报错就是出现异常,后面的代码不会执行,并且程序会直接结束
    # a = 10 + "abc"
    # print("=========")
    
    1. 异常捕获
      出现异常,不希望程序直接崩溃,而是想要自己对这个异常进行处理,就需要捕获异常
    格式1(可以捕获代码段1中出现的所有类型的异常)
    try:
        代码段1
    except:
        代码段2
    
    说明: 执行代码段1并且检测代码段1是否发生异常,如果发生异常,程序不崩溃并执行代码块2
    
    
    格式2
    try:
        代码段1
    except 异常类型:
        代码段2
        
    说明: 捕获代码段1中出现的指定类型的异常
    
    
    
    格式3
    try:
        代码段1
    except (异常类型1, 异常类型2……):
        代码段2
    说明:捕获代码段中指定的所有异常
    
    
    格式4
    try:
        代码段1
    except 异常类型1:
        代码段2
    except 异常类型2:
        代码段3
    

    说明:捕获代码段1中的异常,发生不同的异常就执行异常类型下面的代码段

    四种格式后面都可以加一个
    finally:(不管前面代码有没有发生异常,finally后的代码都会执行)
    代码段

    # 格式1
    try:
        value = input("请输入数字: ")
        int_value = int(value)
    except:
        value = input("输入错误,出现异常,请重新输入: ")
        int_value = int(value)
    
    try:
        a = [1, 2, 3][2]
        print("====")
    except:
        print("有出现异常了")
    
    # 格式2
    try:
        print([1,2][3])
    except IndexError:
        print("出现index异常了")
    
    
    # 格式3
    try:
        print([1,2][1])
        print({"a":"abc"}["b"])
    except (IndexError, KeyError):
        print("出现异常了了")
    
    
    # 格式4
    try:
        print([1,2][1])
        print({"a":"abc"}["b"])
    except IndexError:
        print("出现IndexError异常了")
    except KeyError:
        print("出现了KeyError异常")
    
    
    """
    finally:
        代码段
    finally 后面的代码段一定会执行,不管try里面的代码是否会出现异常,以及出现异常后异常是否会被捕获
    都会执行
    """
    
    
    try:
        open('.,files/abc.txt')
    except FileNotFoundError:
        print("文件不存在")
    finally:
        print("最后会执行的代码")
    

    相关文章

      网友评论

          本文标题:2018-10-15 Day 12 json文件和异常捕获

          本文链接:https://www.haomeiwen.com/subject/ovfqzftx.html