1.json数据
1.什么是json数据
json数据就是一种数据格式,瞒住json格式的数据就是json数据。
文件中的后缀是.json,并且文件中的内容满足json格式
2.json格式
一个json中只有一个数据;并且这个数据是json支持的数据类型的数据
- json支持的数据类型:
-
数字类型 - 包含所有的数字,包括整数和浮点数,例如:100,12.5,-20.5
-
字符串 - 使用双引号括起来的字符集,例如:"123","abc123","%$@*"
-
布尔 - true 和false
-
数组 - 相当于python中的列表,使用[]括起来,括号里面是任意json支持的数据类型
列如:["abc",true,"@@#!%%&&",100] -
字典 -相当于python中的字典,使用{}括起来,括号里面是键值对;
键一般是字符串,值是json支持的任意类型的数据 -
特殊值 - null(相当于None),表示空
-
3.python有个内置的模块用来支持对json数据的处理:json
- a.将json数据转换成python数据
- b.将python数据转换成json数据
- 1.将json数据转换成python数据怎么转换
loads(字符串) - 将json格式的数据转换成python对应的数据
字符串里面的内容必须满足json数据
json python
数字 -- 整型/浮点型
字符串 -- 字符串(双引号会变成单引号)
布尔 -- 布尔(true-->True , false-->False)
数组 -- 列表
字典 -- 字典
null -- None
import json
#字符串
py = json.loads('"abc"')
print(py,type(py)) # 'abc' #<class 'str'>
# 数字
py1 = json.loads('100.12')
print(py1,type(py1)) #100.12 #<class 'float'>
# 布尔
py2 = json.loads('false')
print(py2) #False
#数组
py3 = json.loads('["abc",100,true]')
print(py3) #['abc', 100, True]
with open("data.json","r",encoding="utf-8")as f:
count = f.read()
data_dict = json.loads(count)
# print(data_dict['data'][2]["age"])
-
2.将python数据转换成json数据
json.dumps(数据) - 将python数据转换成内容符合json格式的字符串
注意:结果都是字符串
python -> json
int/flota -> 数字
字符串-> 字符串(单引号会变成双引号)
布尔 -> 布尔(True - true , False - false)
列表/元组 -> 数组
import json
# a.数字
js1 = json.dumps(100)
print(js1,type(js1)) #100 <class 'str'>
# b.字符串
js2 = json.dumps("hello,world")
print(js2,type(js2)) #"hello,world" <class 'str'>
# c.布尔
js3 = json.dumps(True)
print(js3,type(js3)) #true <class 'str'>
# d.列表、元组
js4 = json.dumps((10,'abc',True))
print(js4,type(js4)) #[10, "abc", true] <class 'str'>
js5 = json.dumps([10,'abc',True])
print(js5,type(js5)) #[10, "abc", true] <class 'str'>
# e.字典
js6=json.dumps({"a":10,"b":20,"c":30})
print(js6,type(js6)) #{"a": 10, "b": 20, "c": 30} <class 'str'>
- 3.json文件操作相关方法
load(文件对象) - 将文件对象的数据读出来,并且转换成python对应的数据
(文件对象中的内容必须是json格式的数据)
dump(数据,文件对象) - 将python数据转换成json格式的字符串,再写入文件对象中
#练习:通过添加多个学生信息(姓名、年龄、和电话),
# 添加完成后,最后将数据保存在josn文件中,
# 并且上次添加的信息不回删除,下次添加的时候是在上次的基础上添加的。
while True:
with open("data.json","r",encoding="utf-8")as ff:
countent =ff.read()
list1 = json.loads(countent)
name = input("请输入姓名:")
age =int(input("请输入年龄:"))
tel = int(input("请输入电话:"))
dict1 ={"name":name,"age":age,"tel":tel}
list1.append(dict1)
with open("data.json","w",encoding="utf-8")as f:
list2=json.dumps(list1)
f.write(list2)
num1 = input("是否继续Y/N:")
if num1 =="Y":
continue
else:
break
2.异常捕获
1.什么是异常捕获
程序执行过程中出现错误,也叫出现异常
2.异常捕获
让本来会出现异常的位置,不出现异常,而是自己去处理异常出现的情况
3.怎么捕获异常
-
情况一:捕获所有的异常
-
语法:
try:
需要捕获异常的代码段1
except:
代码段2 -
执行过程:执行代码段1,如果代码段1中出现异常,不会崩溃,而是马上执行代码段2.
如果代码段1没有异常,不会执行代码段2
-
try:
print([1,2,3][10])
except:
print("出现异常")
print("========")
-
情况二:捕获指定的异常
-
a.语法:
try:
代码段1
except 错误类型名:
代码段2 -
执行过程:执行代码段1,当代码段1出现指定错误类型的时候,才执行代码段2
-
try:
print(int("abc"))
print([1,2,3][10]) #IndexError
except ValueError:
print("下标越界")
-
情况三:同时捕获多个异常,对不同的异常做出相同的反应
- 语法:
try:
代码段1
except (错误类型1,错误类型2):
代码段2 - 执行过程:执行代码段1,当代码段1中出现了指定的异常。不崩溃,然后执行代码段2
- 语法:
-
情况四:同时捕获多个异常,对不同的异常做出不同的反应
try:
代码段1
except 错误类型1:
代码段2
except 错误类型2:
代码段3
.
.
.
4.try -except-finally
-
语法:
try:
代码段1
except:
代码段2
finally:
代码段3 - 执行过程:不管代码段1中是否出现异常,也不管异常是否捕获到,finally后面的代码都会执行(写遗书的位置)
try:
print([1,2,3][10])
except KeyError:
print("aaa")
finally:
print("bbbb")
#统计学生的成绩,到输入的结果是"end"
# 最后求输入的成绩的和
while True:
try:
score = int(input("输入成绩:"))
break
except ValueError:
print("输入有误!请重新输入")
#封装一个函数,功能是获取指定文件中的内容(普通文本文件)
# 从封装的角度:调用者做的事情,越少越好
def huo_qu():
while True:
address=input("请输入文件地址:")
try:
with open(address,"r",encoding="utf-8") as f:
countent=f.read()
print(countent)
break
except FileNotFoundError:
print("文件地址错误")
huo_qu()
3.抛出异常
抛出异常:主动让程序出现异常
-
语法:
raise 错误类型 - 程序执行到raise类型语句的时候直接抛出异常
注意:错误类型必须是一个类,并且这个类是exception的子类
print([1,2,3][2])
raise IndexError
网友评论