2018-09-03文件操作和异常捕获

01-容器类型

字典、列表、元组和集合

  • 列表:
    1.列表(list):有序(可以通过下标获取元素)、可变(增删改)、列表中的元素可以是任何类型的数据
    2.列表相关的操作:增删改查
    3.列表相关的运算:+、*、in、not in、len()
    4.相关方法
  • 字典
    1.字典(dict):可变(增删改)、key:唯一的、不可变的;value:可以是任何类型的数据
    2.字典相关的操作:增删改查·
    3.字典相关的运算:in/not in,len()
    4.字典相关的方法
  • 元组
    1.元组(tuple):有序,不可变、元素可以是任何类型的数据
    2.查和列表一样
    3.只有一个元素的元组:(1,)
    4.获取元组中的元素:x,y = (100,200);x,y = 100,200
  • 集合
    1.集合(set):无序、可变、元素是不可变的
    2.支持数学的集合运算:包含(>=,<=)、交集(&)、并集(|)、差集(-)和补集(^)
  • 函数
    1.函数的声明(格式和步骤)----声明的时候不会执行函数体
    def 函数名(参数列表):
    —函数的说明文档
    ——函数体

2.函数的调用(格式和调用过程)
函数名()
变量()
列表[下标]()
字典[key]()
3.参数相关:位置参数、关键字参数、参数的默认值、不定长参数
4.返回值:return和None、return的作用
5.匿名函数:格式
6.递归函数(了解)
7.函数作为变量使用:声明函数的时候实质是在声明一个类型是function的变量

02-文件操作

1.基本过程:打开文件--操作--关闭文件
2.open(路径,打开方式,encoding=编码方式)
a.路径:绝对路径(了解),./相对路径,
b.打开方式:r,rb/br -- 读,w,bw/wb, a --写
注意:路径步存在的时候。读的形式打开会报错;写的形式打开会自动新建文件
c.设置编码:utf-8,gbk
注意:如果是以二进制的形式打开文件(rb/br,wr/rw),不能设置编码
3.文件的读和写
read()/reanline() --读
write()--写
4.关闭
f.close() --- 习惯

  • 打开文件和关闭文件的简写方式(常用的方式)
    with open() as 文件变量名
    ——文件操作
    文件打开操作后,会自动关闭
if __name__ == '__main__':
    # 读二进制(上传文件)
    with open('./filess/8.jpg','rb') as  f:
        # bytes是Python中内置的数据类型,用来表示二进制数据
        content = f.read()
        print(type(content))
        print(content)
    # 将二进制数据写入文件(下载图片)
    with open('./filess/r.jpg','wb') as ff:
            ff.write(content)

03-json文件

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

'''

2.Python对json数据的支持
json---python
对象               字典(dict)
数组               列表list)
数字               整数(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数据)

import json
if __name__ == '__main__':
    # 1.josn转python数据
    with open('./filess/json1.json','r',encoding = 'utf-8') as f:
        content = json.load(f)
        print(content)
        print(type(content))

    content1 = json.loads('"abc"', encoding='utf-8')
    print(content1,type(content1))
python --->             json
    字典                    对象
    列表、元组               数组
    整数/浮点数              数字
    布尔/True,False         true,false
    字符串                   字符串(双引号)
    None                     null
 with open('./filess/new.json','w',encoding='utf-8') as f:
        json.dump({'a':100,'h':200},f)
        # json.dump([1,2,3,'abc'],f)
        # json.dump((1,2,'abc',100,True),f)
        # 注意:Python中的集合不能转换成json数据
        # json.dump({11,22,'aa'},f)
  • 练习,用json文件来保存一个班的班级信息,包括班级名和班上的所有的学生(名字、年龄和电话)
    输入学生信息,添加学生
    根据姓名删除学生
    (做到数据持久化)
json文件的数据格式
{
    "class_name":"班级名"
    "all_students":[
        {"name":"名字","age":"年龄","tel":"电话"},
        {"name":"名字","age":"年龄","tel":"电话"},
        {"name":"名字","age":"年龄","tel":"电话"}
    ]
}
'''
# 1.读出保存班级信息对应的json文件中的内容
with open('./filess/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_student'].append(stu)
'''
class_info = {
    'class_name': 'python1806',
    'all_student':[
        stu
    ]
}
'''
# 将最新的数据写入文件中
with open('./filess/class_info.json','w',encoding='utf-8') as f:
    json.dump(class_content,f)
'''
数据的持久化:
1.将数据从文件中读出来
2.修改数据(增、删、改)
3.将新的数据在写入文件中
'''

04-异常捕获

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

执行过程:执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块,执行完后再执行其他语句
如果try里面的代码块没有异常,就不执行except后面的代码块,而是直接执行其他语句

b.形式2:
try:
——需要捕获异常的代码块(可能会出现异常的代码块)
except 错误类型:
——出现异常后执行的代码块

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

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

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

if __name__ == '__main__':
    # 1.什么情况时使用
    # a.输入两个数,让后求这两个数的商是多少
    # num1 = float(input('除数:'))
    # num2 = float(input('被除数:'))
    # print('%f /%f = %f' % (num1,num2,num1/num2))
    try:
        num1 = float(input('除数:'))
        num2 = float(input('被除数:'))
        print('%f /%f = %f' % (num1, num2, num1 / num2))
    except :
        print('输入错误,请重新输入')

    # b.打开一个不存在的文件,不希望程序崩溃,只是让读出的内容为空
    import json
    # with open('./files/info.json','r',encoding= 'utf-8') as f:
    #     content = json.load(f)
    try:
        with open('./files/info.json', 'r', encoding='utf-8') as f:
            content = json.load(f)
    except FileNotFoundError:
        print('文件不存在')

    # 2.捕获异常
    # a = [1,2,3,4,5]
    # try:
    #     print(a[6])
    # except:
    #     print('捕获到异常')
    # print('==========')
    #
    # dict1 = {'a':1,'b':2}
    # try:
    #     dict1['c']
    #     print(a[6])
    # except IndexError:
    #     print('下标越界')
    # except KeyError:
    #     print('key错误')

# 3.抛出异常(后面补充)
    num = input('请输入一个奇数:')
    if int(num) % 2 == 0:
        raise ValueError

你可能感兴趣的:(2018-09-03文件操作和异常捕获)