美文网首页
day12 json数据、异常捕获等基操

day12 json数据、异常捕获等基操

作者: 遇见那天的雨真大 | 来源:发表于2018-11-20 23:40 被阅读0次

    1.json数据

    1.什么是json数据

    json是一种数据格式,满足json格式的数据就是json数据
    文件后缀.json,并且文件中内容满足json格式

    2.json格式

    一个json中只有一个数据,并且这个数据是json支持的数据类型。
    json支持的数据类型
    数字类型 - 包含所有的数字,包括整数和小数。例如:100 12.05 -100
    字符串 - 使用双引号括起来的字符集例如:"123" "abc"
    布尔 - true和false、
    数组 - 相当于python中的列表,使用中括号括起来,括号里面是json、支持的任意类型的数据
    例如 ["abc",100,true,false]
    字典 - 相当于Python中的字典,使用{}括起来,括号里面是键值对,键一般是字符串,值是json支持的任意类型
    特殊值 - null(相当于None,表是空)“message”:null

    3.python中有一个内置模块 json 用来支持对json文件的处理。

    • a.将json转换成python数据
    • b.将python的数据转换成json的数据
    4.将son转换成python数据

    loads(字符串) - 将json格式的数据转换成python对应的数据。
    注意:字符串的内容必须是json支持的数据。

    数字:整型或者浮点型
    字符串:还是字符串(双引号转换成单引号)
    布尔  布尔(true --》 True ,false --》False)
    数组  列表
    字典  字典
    null  none
    
    py2 = json.loads('"abc"')  #去掉引号之后还是json支持的格式
    py1 = json.loads('100')  #去掉引号之后还是json支持的格式
    print(py1,type(py1))
    print(py2,type(py2))
    py3 = json.loads('true')
    print(py3)
    py4 = json.loads('[100,"abc",true,null]')
    print(py4)
    py5 = json.loads('{"a":1,"b":2,"c":3}')
    print(py5)
    
    练习 取出成绩
    py_dict = json.loads('{"data":'
                         '[{"name": "张三", "age": 18},{"name": "李四", "age": 20},{"name": "王五", "age": 19}],'
                         '"code": 200,"messages": null}')
    data_list = py_dict["data"]
    for item in data_list:
        if item["name"] == "王五":
            print("王五的年龄",item["age"])
    
    with open("data.json",encoding="utf-8") as f:
        aa = f.read()
        py_data = json.loads(aa)
        data_list = py_data["data"]
        for item in data_list:
            if item["name"] == "王五":
                print("%sd的年龄是%s"%(item["name"],item["age"]))
    

    5 将python数据转换成json数据

    dumps(数据) - 将python数据转换成符合json格式的字符串
    注意:最终结果是字符串

    python json
    int、float    数字
    字符串    字符串(单引号变双引号)
    布尔     布尔(True - true,False - false、)
    列表/元组   数组
    字典    字典
    
    js1 = json.dumps(100)
    print(js1,type(js1))
    js2 = json.dumps("hello word")
    print(js2)
    js4 = json.dumps((10,"abc",True,None))
    print(js4)
    js5 = json.dumps([10,"abc",True,None])
    print(js5)
    js6 = json.dumps({'a':1,'b':2,'c':[10,"20"]})
    print("js6",js6)
    
    练习2 添加学生信息保存起来(姓名,n年龄,电话),并且上次添加的信息不会删除,下次再添加的时候是在上次基础上添加
    flag = True
    with open("stu_info.json",encoding="utf-8") as f:
        conten = f.read()
        all_students = json.loads(conten)  #这是一个列表
    while flag:
        b = {}
        name = input("姓名:")
        b.update([["姓名",name]])
        age = input("年龄:")
        b.update([["年龄",age]])
        tel = input("电话:")
        b.update([["电话",tel]])
        all_students.append(b)
        with open("stu_info.json","w",encoding="utf-8") as f:
            js1 = json.dumps(all_students)
            f.write(js1)
        aaa = input("是否继续?是1,否2")
        if int(aaa) == 1:
            flag = True
        else:
            flag = False
    

    6 .json文件操作相关方法

    • a.load(文件对象) - 文件对象中的数据读出来,并且转换成python对应的数据。
      文件对象中内容必须是json格式的数据
    • b.dump(数据,文件对象)
    with open("stu_info.json",encoding="utf-8") as f:
        content = json.load(f)
        print(content)
    
    with open("data.txt",encoding="utf-8") as f:
        content1 = json.load(f)
        print(content1)
    
    
    • c.dump(数据加文件对象,将python数据转换成json格式的字符串),再写入文件对象
      with open("new.json","w",encoding="utf-8") as m:
      json.dump([1,2,3,True],m)
    # 封装自己的load方法,要求传入文件地址,就将文件对应的数据读出来,转换成python的数据。
    def json_to_python(file):
        with open(file,encoding="utf-8") as f:
            py7 = json.loads(f.read())
        return py7
    a = json_to_python('test22.json')
    print(a)
    # 封装自己的dump方法,要求传入数据写入需要创建的json文件名,
    def python_to_json(obj,file_name):
        with open(file_name,"w",encoding="utf-8") as f:
            f.write(json.dumps(obj))
    python_to_json([1,3,"aaa",{"name":"lorry","age":"23"}],"tset222.json")
    

    2.异常捕获

    1.什么是异常

    程序执行过程中,也叫出现异常

    2.异常捕获

    让本来会奔溃的的位置,不出现异常,而是自己去处理异常出现的情况。

    3.怎样捕获异常

    结构一:捕获所有的异常

    try:
        需要捕获异常的代码段1
    except:
        代码段2
    执行过程:执行代码段1,如果代码段1中出现异常,首先不会崩溃,而是马上执行代码段2.
    如果代码段1没有异常,不会执行代码段2
    
    try:
        print("****")
        print([1,2,3][10])
        print("////")
    except:
        print("出现异常")
    print("=======")
    

    结构二:捕获指定异常

    a.语法:
    try:
        代码段1
    except 错误类型名:
        代码段2
    执行过程:当代码段1出现指定类型的异常后不崩溃,而是执行代码段2
    
    try:
        print(int("abc"))
        print("****")
        print([1,2,3][10])
        print("////")
    except ValueError:
        print("值出现异常")
    print("=======")
    
    try:
        print("****")
        print([1,2,3][10])
        print("////")
    except IndexError:
        print("下标越界")
    print("=======")
    

    结构三:同时捕获多个异常,对不同的异常做出相同的反应

    try:
        代码段1
    exsept(错误类型1,错误类型2,错误类型3.。。。)
        代码段
    执行过程:执行代码段1,当代码段1中出现指定的异常,不崩溃,然后执行代码段
    
    try:
        # print([1,2][2])
        print({"a":1,}["bb"])
    except (IndexError,KeyError,ValueError,StopIteration,FileNotFoundError):
        print("出现多种异常中的一个")
    
    情况四:同时出现多种异常,对不同的做出不同的反应
    try:
        代码段1
    except 错误类型1:
        代码段2
    escept 错误类型2:
        代码段3 
    
    try:
        print([1,2][2])
    except KeyError:
        print("建错误")
    except ValueError:
        print("值错误")
    except IndexError:
        print("下标越界")
    

    重要:finally

    try:
        print([1,2][1])
    except:
        代码段2
    finally:
        代码段3
    不管代码段1中,也不管异常是否能捕捉,finally后面的代码段3都会执行。写遗书的作用
    
    try:
       print([1,2][110])
    except IndexError:
       print("下标越界")
    finally:
       print("最后")
    
    print("最后****")
    

    什么时候使用异常捕获:
    明明某段代码可能会出现异常,但是又没有办法避免,就可以使用异常捕获

    练习 s输入成绩,知道输入的数据是正确的为止。
    while True:
        try:
            score = float(input("输入成绩:"))
            break
        except ValueError:
            print("输入有误:")
            score = float(input("输入成绩:"))
    
    封装一个函数,功能是获取指点文件中的内容(普通文本文件)
    def capture_content(file):
        while True:
            try:
                with open(file,"r",encoding="utf-8") as f:
                    content = f.read()
                    return content
            except FileNotFoundError:
                print("未找到文件,请请重新输入")
                return " "
    print(capture_content("静夜思.txt"))
    

    3抛出异常

    语法:
    raise 错误类型 - 程序执行到raise的时候,直接抛出异常
    注意:错误类型必须是一个类,并且这个类是Exception的子类

    练习, 输入年龄,如果输入的年龄不在0-100,程序程序就崩溃。

    age = input("请输入年龄:")
    if int(age) > 100:
        raise ValueError
    else:
        pass
    
    class Ageerrro(Exception):
        def __str__(self):
            return "年龄越界了"
    raise Ageerrro
    

    相关文章

      网友评论

          本文标题:day12 json数据、异常捕获等基操

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