一阶段day12-01-json文件和异常处理

补充:打开文件的时候是以读的方式打开,如果文件不存在会报:FileNotFoundError
打开文件的时候是以写的方式打开, 如果文件不存在会自动创建对应的文件

0.打开文件和关闭文件的缩写

with open(文件路径, 打开方式, encoding=编码方式) as 文件对象:
》》文件操作相关的代码

说明:打开文件,执行完文件操作相关的代码后,会自动关闭本打开的这个文件

with open('./files/aaa.txt', 'w', encoding='utf-8') as f1:
    f1.write('床前明月光,\n 疑是地上霜。\n')

1、二进制文件的读与写

常见二进制文件:音频文件、视频文件、图片文件、压缩包都是属于二进制文件
注意:二进制文件不能设置文本编码方式(不能给encoding赋值)

with open("./pictures/picture1.png",'rb') as f1:
    content=f1.read()
    print(content)  #执行完毕,自动关闭文件

with open("./pictures/picture2.jpg",'wb') as f2:
    f2.write(content)  #把content添加到f2
    print(f2.write(content))

一、json文件

1、什么是json文件

json是一种特定格式的数据(JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。主要用来在互联网上做文本数据传输。
json数据本身是文本数据,json文件就是后缀是.json的文件,并且文件内容必须满足json格式的要求。

2、json格式

a、一个json文件对应一条数据。比如一个数组,一个字典,一串字符串
b、json中的数据必须是json对应的数据类型
数字类型(number)——》所有的数字,包含整数和小数;例如:123,34.5
字符串类型(string)——》用双引号括起来的数据;例如:"hello python"
数组(arry)——》相当于Python中的列表,例如:[12,43,43.45,"将豆腐丝"]
字典(dictionary)——》相当于Python中的字典,例如:{"红豆沙":312,"abc":"alice",{}}
布尔值(bool)——》true,false 注意布尔值在json文件中首字母是小写,在Python中是大写;
null——》相当于Python中的None,用来表示空;

3、Python对json的支持

Python中专门提供了一个json模块,用来处理json数据
load(文件对象)——》将文件对象的内容读出来,并且将内容转换成Python对应的数据类型。要求文件内容必须是json格式的数据。
dump(内容,json文件对象)——》将指定内容以json格式写入到指定文件中(不一定是json文件)。
losds(json格式字符串)——》将字符串内容是json数据的字符串转换成Python对应的数据类型。
dumps(内容)——》将指定内容转换成json格式的字符串。

json数据类型转换成Python数据类型:
json python
数字 int/float
字符串 str
数组 list
字典 dict
true/false True/False
null None

4、

import json  #导入json模块
(1)loads
loads(字符串)  --> 要求字符串的内容必须满足json格式
content = json.loads('100.12')
print(content, type(content))  #100.12 <class 'float'>

content = json.loads('"abc"')
print(content, type(content))   #abc <class 'str'>

content = json.loads('[12, 12.8, "name", [1, "2a"]]')
print(content, type(content))#[12, 12.8, 'name', [1, '2a']] <class 'list'>
print(type(content[3])) #<class 'list'>

content = json.loads('{"a": 100, "b": true, "c": false, "d": null}')
print(content, type(content))  #{'a': 100, 'b': True, 'c': False, 'd': None} <class 'dict'>
(2)load

load(文件对象) --> 将文件对象中的内容转换成python数据类型数据。要求文件中的内容必须是json格式的数据。

with open('./num.json') as f:
      print(json.load(f))
Python数据转json数据:
python json
int/float 数字
str 字符串(会将单引号变成双引号)
True/False true/false
dict 字典
列表/元祖 数组
None null

注意:除了上面列出的类型,其他类型不能直接转换成json格式的数据

(3)dumps

dumps(内容) --> 内容是python数据。返回值是一个字符串,并且字符串的内容满足是json格式的

str1 = json.dumps([1, 2, 'abc'])
print(str1) #[1, 2, "abc"]

print(json.dumps((100, 200, 'abc')))  #[100, 200, "abc"]

str1 = json.dumps({'a': -12.34, 'b': True, 'c': 'Hello'})
print(str1, type(str1))  #{"a": -12.34, "b": true, "c": "Hello"} <class 'str'>
(4)dump

dump(内容, 文件对象) --> 将内容以json格式写入文件中

with open('./num.json', 'w') as f:
    f.write(str1)    #等效下一行代码
    json.dump({'a': 100, 'b':200, 'c': True}, f)  #等效上一行代码

三、文件的使用

在程序中声明一个变量用来保存当前程序执行次数
打开文件》》》操作文件》》》关闭文件

import json
def nums():
    print('hello Python!')
    with open("./num.json",'r') as q:   #只读方式打开
        num=json.load(q)                    #将文件里的值赋值给num并关闭文件 
    print(num)
    num+=1         
    with open("./num.json",'w') as q:   #以写的方式打开文件
        json.dump(num,q)      #将num值传给文件并关闭文件
nums()

四、异常捕获’

1、异常——》报错,出现异常;后面的代码不会执行

2、异常捕获

出现异常,不希望程序直接崩溃,而是想要自己对这个异常进行处理,就需要捕获异常;

格式1:

try:
》》代码段1
except:
》》代码段2
说明:执行代码段1并且检测代码段1是否发生异常,如果发生异常则程序不会崩溃而是执行代码段2;

try:
    num=input("请输入数字:")
    int(num)
except:
    print("输入有误,请输入纯数字!")

以上代码如果内容包含非数字数据则会执行: 输入有误,请输入纯数字! 代码段。

格式2:

try:
代码段1
except 异常类型:
代码段2
说明:捕获代码段1中出现的指定类型的异常,捕获到则执行代码段2;

 try:
     print([1,2][2])
 except KeyError:
     print('Warning:You Are Wrong!') #IndexError: list index out of range  
以上代码崩溃的原因是因为出现的异常类型与设置捕获的异常类型不符;
print("===========")
try:
    print([1,2][2])
except IndexError:
    print('Warning:You Are Wrong!')   #Warning:You Are Wrong!
print("===========")
以上代码执行结果为:Warning:You Are Wrong!
格式3:

try:
代码段1
except (异常1,异常2,异常3,...):
代码段2
说明:捕获代码段1中出现的指定类型的异常,捕获任意一个异常则执行代码段2;

格式4:

try:
代码段1
except 异常1:
代码段2
except 异常2:
代码段3
except 异常3:
代码段4
说明:捕获代码段1中出现的指定类型的异常,捕获一个异常则执行相应的代码段n;

try:
    print({'a':100}['b'])
except IndexError:
    print('越界')
except KeyError:
    print('key不存在')   #key不存在
print("===========")
格式5

finally后面的代码段一定会执行(不管try里面的代码是否会出现异常,以及出现异常后异常是否被捕获)
try:
代码段1
except:
代码段2
finally:
代码段3

try:
    print({'a':100}['b'])
except KeyError:
    print('key不存在')   #key不存在
except IndexError:
    print('越界')
finally:
    print('我感觉我还能再抢救一下')  #我感觉我还能再抢救一下
print("===========")

3、抛出异常

raise 异常类型

n=int(input('输入偶数:'))
if n&1:
    raise ValueError  #如果输入是奇数  则出现异常
else:
    print('这么听话??!')  #输入偶数 执行本段代码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一.recode 1.容器类型列表:[元素];可变的,有序;任意类型;增删改查字典:{键值对}; 可变的, 无序;...
    芽菜包66阅读 325评论 0 0
  • 一、文件操作 补充:打开文件的时候如果是以读的方式打开,如果文件不存在会报:FileNotFoundError。打...
    xdxh阅读 337评论 0 0
  • 一、recode 1.容器类型 列表:[元素];可变的,有序;任意类型;增删改查字典:{键值对}; 可变的, 无序...
    大漠判官1阅读 248评论 0 1
  • 是凤凰涅槃前的浴火重生吗?是黎明前的暴风雨吗?是置之死地而后生吗?不知道,反正郁闷和失落又来找我了!仿佛每一...
    醉悟人生阅读 444评论 3 0
  • 昨晚又去万邦书城了,好像书店里的布置比之我前两次去,有些许变化,重新增加了些摆件,新增了些专供读书时所用的香,品茶...
    悠然见南山_sunshine阅读 624评论 6 10

友情链接更多精彩内容