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
网友评论