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

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))pythonjson int/float数字 str字符串(单引号变为双引号) True/Falsetrue/false dict字典 列表/集合数组 Nonenull

  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 = https://www.it610.com/article/int(input("请选择: ")) if input_value =https://www.it610.com/article/= 1: continue else: break# 或者写returndef show_stu(): for student in all_stu: print(student)while True: print("=================================") print("1. 添加学生") print("2. 显示学生信息") print("3. 退出") input_value = https://www.it610.com/article/int(input("请选择: ")) if input_value =https://www.it610.com/article/= 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 = https://www.it610.com/article/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中的异常,发生不同的异常就执行异常类型下面的代码段
【2018-10-15|2018-10-15 Day 12 json文件和异常捕获】四种格式后面都可以加一个
finally:(不管前面代码有没有发生异常,finally后的代码都会执行)
代码段
# 格式1 try: value = https://www.it610.com/article/input("请输入数字: ") int_value = int(value) except: value = https://www.it610.com/article/input("输入错误,出现异常,请重新输入: ") int_value = https://www.it610.com/article/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("最后会执行的代码")

    推荐阅读