2018-09-03 day11学习总结

文件操作与异常捕获

1.文件操作

1.基本过程:打开文件 - 操作-关闭文件
2.open(路径,打开方式,encoding = 编码方式)

a.路径:绝对路径(了解),相对路径:./相对路径,../ .../
b.打开方式:r,rb/br--读,w,bw/wb,a ---写
注意:路径不存在的时候,读的形式打开会报错。写的时打开会新建文件
c.设置编码:utf-8,gbk
注意:如果是以二进制的形式打开文件(rb/br,wb/bw),不能设置编码方式

3.文件的读和写:
read()/ readline()--读
write()---写

4.关闭
f.close() ---良好的习惯

# 1.打开文件和关闭文件的简写方式(常用的):
# with open() as 文件变量名:
#     文件操作
#     
# 文件打开操作完成后,会自动关闭文件
# 读二进制文件(上传文件)
with open('./files/QQ图片20180903095224.jpg','rb') as f:
    # bytes 是python中内置的数据类型,用来表示二进制数据
    content = f.read()
    print(type(content))
    print(content)

# 将二进制数据写入文件(下载图片)
with open('./files/new.jpg','wb') as ff:
    ff.write(content)
2.json文件

json是有特定格式的一种文本形式,他有自己的语法
json文件就是后缀是.json的文本文件

1.json格式对应的数据类型及其表现
a.一个json文件中只能存一个数据,这个数据的类型必须是以下类型中的一个
类型: 格式: 意义
对象(object): {"a":10,"b":[1,2]} 相当于字典
数组(array): [100,"abc",true,[1,2]] 相当于列表,里面的元素可以是任何类型
数字(number): 100,3.14,-200 包含整数和小数
字符串(string): "abc","hello json"
布尔: true/false 是(真)/否(假)
null: null 空值

2.python对json数据的支持
json ----> python
对象 字典
数组 列表
数字 整数(int)和浮点数(float)
布尔/true,false 布尔(bool)/True,False
null None

json模块是python中内置的,专门用来处理json数据的一个模块

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)

content1 = json.loads('100',encoding='utf-8')
print(content1,type(content1))

python --------> json
字典 对象
列表,元组 数组
布尔/True,False true,false
字符串 字符串(引号)
None null

# 2.python 转json数据
with open('./files/new.json','w',encoding='utf-8') as f:
    # json.dump({'a':100,'hn':200},f)
    json.dump((1,2,3,'abc',True),f)
#     注意:python中集合不能转换成json数据
#
    json_str = json.dumps([2,3,4,'abc',None])
    print(json_str,type(json_str))
# 练习,用json文件来保存一个班的班级信息,包括班级名和班上的所有学生的(名字,年龄和电话)
# 输入学生信息添加学生
# 根据姓名删除学生
# (做到数据持久化)
'''
json文件的数据格式
{
    "class_name":"班级名",
    "all_student":[
        {"name":"名字","age":年龄,"tel":"电话"},
        {"name":"名字","age":年龄,"tel":"电话"},
        {"name":"名字","age":年龄,"tel":"电话"}
    ]


}

'''
# 1.读出保存班级信息对应的json文件中的内容
with open('./files/class_info.json','r',encoding='utf-8') as f:

    class_content = json.load(f)
    print(class_content)


# 输入信息添加数据
name = input("姓名:")
age = input("年龄:")
tel = input("电话:")
stu = {"name":name,"age":int(age),"tel":tel}
class_content['all_students'].append(stu)
# class_info = {
#     'class_name':'python1806',
#     'all_students':[
#         stu
#     ]
# }

with open('./files/class_info.json','w',encoding='utf-8') as f:
    json.dump(class_content,f)

name1 = input("输入你要删除学生的姓名:")
with open('./files/class_info.json','r',encoding='utf-8') as f:
    class_content = json.load(f)
    for item in class_content["all_students"]:
        if name1 == item["name"]:
            class_content["all_students"].remove(item)
            break
    with open('./files/class_info.json', 'w', encoding='utf-8') as f:
        json.dump(class_content, f)
    print(class_content)

3.异常捕获

1.为什么要使用异常捕获
异常:程序崩溃了,报错了。。
程序出现异常,但是不想因为这个异常而让程序崩溃。这个时候就可以使用异常捕获机制
2.怎么捕获异常
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except:
出现异常后执行代码
其他语句

执行过程:执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的语句
如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句
b.形式二:
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except 错误类型:
出现异常后执行代码

执行过程:执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的语句
如果try里面的代码块没有出现指定的异常,就不执行except后面的代码块,而是直接执行其他语句
c.形式3
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except (错误类型1,错误类型2...):
出现异常后执行代码

d.形式4
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except 错误类型1:
执行语句块1
except 错误类型2:
执行语句块2

d.形式5
try:
需要捕获异常的代码块(可能会出现异常的代码块)
except:
出现异常的执行代码
finally:
不管有没有捕获到异常(就算崩溃了也会执行)
(在这儿做程序异常退出时的善后,一般做保存数据的进度的工作)

3.抛出异常(后面补充)
raise 错误类型


# b.打开一个不存在的文件,不希望程序崩溃,只是让读出的内容是空

try:
    with open('./files/info.json', 'r', encoding='utf-8') as f:
        content = json.load(f)
except FileNotFoundError:
    print("没有找到该文件")
# 2.捕获异常
b = [1,2,3,4,5]
try:

    print(b[6])
except:
    print('下标越界')
print('=========')

dict1 = {'a':12,'b':23}
try:
    print(dict1['c'])
    print(b[6])

except IndexError:
    print('下标越界')
except KeyError:
    print('key错误')

你可能感兴趣的:(2018-09-03 day11学习总结)