2018-10-15|2018-10-15 Day 12 json文件和异常捕获
1. recode
- 容器类型
列表: [元素]; 可变的、有序;任意类型;增删改查
字典: {键值对};可变的、无序;key是唯一的不可变的,value任意类型;增删改查
元组: (元素,);不可变的,有序的; 任意类型;查
x, y = (10, 20)
tuple1 = 10, 20, 30
x, *y = (1, 2, 3, 4, 5, 6)
tuple_single = (1,) / 1,
集合: {元素};可变的,无序的,不重复的; 不可变的并且唯一; 数学集合运算;并集,交集,补集,差集
迭代器: 无字面量;可变(只能取出);只能通过next取值,取出后,迭代器中值就不存在了
- 函数
函数的声明
函数的调用:
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关键字的函数:
- 文件操作
打开文件 --> 读写文件 --> 关闭文件
open(文件的路径, 打开方式, encoding=编码方式) ---> 返回被打开的文件对应的文件对象
./, ../, .../
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,疑是地上霜")
- 二进制文件的读写
常见的二进制文件: 音频文件、视频文件、图片、压缩包等都是属于二进制人间
注意: 二进制文件不能设置文件编码方式,不能给encoding赋值
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格式,如果不满足,文件本身就会报错
- 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, 用来表示空
- pthon对json的支持
Python中专门提供了一个json模块,用来处理json数据
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))
- load用法
要求:文件中的内容必须是json格式的数据
with open('./text2.json') as f:
print(json.load(f))pythonjson
int/float数字
str字符串(单引号变为双引号)
True/Falsetrue/false
dict字典
列表/集合数组
Nonenull
- 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))
- dump
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中出现的所有类型的异常)
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("最后会执行的代码")
推荐阅读
- 赢在人生六项精进二阶Day3复盘
- 继续努力,自主学习家庭Day135(20181015)
- 2019-01-17-晨读7期-直子Day25
- 21天|21天|M&M《见识》04
- 阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15|阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15 20191025
- 桂妃研读社|桂妃研读社|D124|如何有效阅读一本书 Day1
- 【70号】Day26朋友日
- 齐帆齐微课打卡DAY54——靠工资,普通人能实现财务自由吗((1731字))
- 【挑战日更】Day6.《终身学习.10个你必须掌握的未来生存法则》摘录之三
- 第九期Day8—浮生暂寄梦中梦,梦中说梦两重虚!