美文网首页
2018-09-03文件操作和异常捕获

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

作者: Smilebest | 来源:发表于2018-09-03 20:53 被阅读7次

    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文件操作和异常捕获

          本文链接:https://www.haomeiwen.com/subject/kijiwftx.html