一.文件操作
1.打开文件和关闭文件的简写方式(常用的):
with open() as 文件变量名:
文件操作
#文件操作完成后,会自动关闭文件
#读二进制文件(上传文件)
with open('./files/123.png','rb') as f:
content = f.read()
print(type(content))
#<class 'bytes'> bytes是python中内置的数据类型,用来表示二进制数据
#将二进制数据写入文件(下载图片)
with open('./files/new.png','wb') as ff:
ff.write(content)
二.json文件
json是有特定格式的文本形式,它有自己的语法.json文件就是后缀是.json的文本文件
1.json格式对应的数据类型及其表现
一个json文件中只能存一个数据,数据类型必须是以下类型中的一个:
类型 | 格式 | 意义 |
---|---|---|
对象(object) | {"a":10,"b":[1,2]} | 相当于字典 |
数组(array) | [100,"abc",true,[1,2]] | 相当于列表,里面的元素可以是任何类型 |
数字(number) | 100,3.14,-200 | 包含整数和小数 |
字符串(string) | "abc"(双引号) | 字符串 |
布尔 | true/false | 是(真)/否(假) |
null | null | 空值 |
2.python对json数据的支持
json | python |
---|---|
对象 | 字典(dict) |
数组 | 列表(list) |
数字 | 整数(int)和浮点数(float) |
布尔(true,false) | 布尔(True,False) |
null | None |
1.load(json文件对象):以json的格式获取文件中的内容.将内容转换成相应的python数据
2.loads(json格式内容的字符串,编码方式):将json格式的字符串,转换成python对应的数据
3.dump(需要写入json文件中的python数据,json文件对象)
4.dumps(需要转换成json格式字符串的python数据)
# 1.json转python数据
with open('./files/json1.json','r',encoding='utf-8') as f:
content = json.load(f)
print(content)
3.python转json数据
python | json |
---|---|
字典(dict) | 对象 |
列表(list) | 数组 |
整数(int)和浮点数(float) | 数字 |
布尔(True,False) | 布尔(true,false) |
None | null |
#写入json文件中的python数据
with open('./files/new.json', 'w', encoding='utf-8') as f:
json.dump({'a':100, 'hn': 200, 'abc': None}, f)
# 注意:python中集合不能转换成json数据
# 将python数据,转换成json字符串
json_str = json.dumps([2, 3, 4, 'abc', True, None])
print(json_str, type(json_str))
练习:用json文件来保存一个班的班级信息,包括班级名和班上的所有学生(名字,年龄和电话)
#首先分析框架
json文件的数据格式
{
"class_name":"班级名",
"all_students":[
{"name":"名字", "age":年龄, "tel":"电话"},
{"name":"名字", "age":年龄, "tel":"电话"},
{"name":"名字", "age":年龄, "tel":"电话"} }
]
}
#1.读出保存班级信息对应的json文件中的内容
with open('./files/class_info.json','r',encoding='utf-8') as f:
content = json.load(f)
print(content)
#2.输入信息添加数据
name = input('姓名:')
age = input('年龄:')
tel = input('电话:')
stu = {"name":name,"age":int(age),"tel":tel}
content['all_students'].append(stu)
with open('./files/class_info.json','w',encoding='utf-8') as f:
json.dump(class_content,f)
#3.删除
with open('./files/class_info.json','r',encoding='utf-8') as f:
content = json.load(f)
print(content)
a = input('请输入要删除的学生姓名:')
for item in content['all_students']:
if a == item['name']:
content['all_students'].remove(item)
print('删除成功!')
with open('./files/class_info.json','w',encoding='utf-8') as f:
json.dump(content,f)
with open('./files/class_info.json','r',encoding='utf-8') as f:
content = json.load(f)
print(content)
数据的持久化:
1.将数据从文件中读出来
2.修改数据(增,删,改)
3.将新的数据再写入文件中
三.异常捕获
1.使用异常捕获可以让出错的程序不会崩溃
2.捕获异常的形式
(1)形式1
try:
需要捕获异常的代码块
except:
出现异常后执行的代码
#执行过程:执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块,执行完后再执行其他语句,如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句
(2)形式2
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except 错误类型:
出现异常后执行代码
#执行过程:执行try后面的代码块,一旦遇到指定的错误类型异常,就马上执行except后面的代码块,执行完后再执行其他语句
如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句
(3)形式3
c.形式3
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except(错误类型1,错误类型2...):
出现异常后执行代码
(4)形式4
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except 错误类型1:
执行语句块1
except 错误类型2:
执行语句块2
(5)形式5
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except:
出现异常后执行代码
finally:
不管有没有异常都会执行(就算崩溃了也会执行)
(在这做程序异常退出时的善后,一般做一些保存数据和进度的工作)
捕获异常的例1(形式1):
a = [1, 2, 3, 4, 5]
try:
print(a[6])
except:
print('下标越界')
print('===========')
#输出结果是:下标越界
===========
捕获异常的例子2(形式4):
dict1 = {'a':1, 'b': 2}
try:
print(a[6])
dict1['c']
except IndexError:
print('下标越界2')
except KeyError:
print('key错误')
#输出结果是:下标越界2
3.抛出异常
例:
# 抛出异常,让程序主动崩溃
num = input('请输入一个奇数:')
if int(num) % 2 == 0:
raise KeyError
#如果程序执行时,输入一个偶数,那么程序就会崩溃
四.认识pygame
第一种方式
第二种方式