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

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

作者: nothingpy | 来源:发表于2018-09-03 19:27 被阅读0次

    1.文件操作

    a.基本过程:打开文件 -操作 -关闭文件
    b.open(路劲,打开方式,encoding = 编码方式)
    c.设置编码:utf -8 ,gbk
    注意:如果是以二进制的形式打开文件(rb/br,wb/bw),不能设置编码方式
    
    with open() as 变量名:
      文件操作
    '''
    文件打开操作完成后,会自动关闭文件
    '''
    

    2.Json

    json是有特定格式的一种文本形式,它有自己的语法
    json文件就是后缀是.json的文本文件。
    
    1.json格式对应的数据类型及其表现
    1.1一个json文件只能存一个数据,这个数据的类型必须是以下类型中的一个。
    '''
    类型                                  格式                           意义
    a.对象(object)                  {"a":1,"b":[1,2]}                相当于字典
    b.数组(array)                    [100,"a",true]                  相当于list
    c.数字(number)                       100                         包含整数和小数
    d.字符串(string)                    ''abc''                       就是字符串
    e.布尔                            true/false                      是/否
    f.null :                         null(None)                      空值
    '''
    
    import json
    '''
    一:json转python数据
    1.load(json文件对象):以json的格式,获取文件中的内容。将内容转换成相应的python数据。
    2.loads(json格式内容的字符串,编码方式):将json格式的内容,转换成python对应的数据。
    '''
    二:python转json数据
    '''
    1.dump(需要写入json文件中的python数据,json文件对象)
    2.dumps(需要转换成json格式字符串的python数据)
    '''
    

    3.python对json文件的支持

    json ---> python
    对象 ---> 字典
    数组 ---> 列表
    数字 ---> 整数、浮点数
    true,false ---> 布尔(True,False)
    null ---> None
    
    '''
    python---> json
    字典-----------------> 对象 
    列表,数组 -----------> 数组
    整数、浮点数 ---------> 数字
    布尔(True,False)---> true,false
    None--------------->  null 
    '''
    

    4.异常捕获

    a.程序出现某种异常,但是不想因为这个异常而让程序崩溃。这个时候就可以使用异常捕获机制
    b.捕获异常

    1.形式一(捕获所有异常)
    try:
      需要捕获异常的代码块(可能会出现异常的代码块)
    except:
      出现异常后执行的代码
    '''
    执行过程:依次执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的代码。
    如果try里面的代码块没有异常,就不执行except后面的代码,而执行其他的代码。
    '''
    a = [1,2,3,5]
    try:
        print(a[5])
    except:
        print('捕获到异常')
    
    2.形式二
    try:
      需要捕获异常的代码块(可能会出现异常的代码块)
    except 错误类型:
      出现异常后执行的代码
    '''
    执行过程:依次执行try后面的代码块,一旦遇到指定的异常,就马上执行except后面的代码块。执行完后再执行其他的代码。
    如果try里面的代码块没有指定的异常,就不执行except后面的代码,而执行其他的代码
    '''
    a = [1,2,3,5]
    try:
        print(a[5])
    except IndexError:
        print('捕获到异常')
    
    a = [1,2,3,5]
    try:
        print(a[5])
    except (IndexError,KeyError):
        print('捕获到异常')
    
    3.形式三
    try:
      需要捕获的异常的代码块(可能会出现异常的代码块)
    except 错误类型1:
      执行语句1
    except 错误类型2:
      执行语句2
    '''
    还是只会捕获到一个异常
    '''
    
    4.形式四
    try:
      需要捕获的异常的代码块(可能会出现异常的代码块)
    except 错误类型1:
      执行语句1
    except 错误类型2:
      执行语句2
    finally:
      执行语句   
    '''
    finally:不管有没有异常,都会执行finally里面的的东西。
    '''
    def user_input():
        try:
            numb1 = float(input('请输入除数:'))
            numb2 = float(input('请输入被除数:'))
        except ValueError:
            print('输入类型错误,请输入数字!!')
            user_input()
        test(numb1,numb2)
    
    def test(n,y):
        try:
            print('%f / %f = %.2f' % (n,y,n/y))
        except ZeroDivisionError:
            print('被除数不能为0')
            user_input()
        finally:
            print('哈哈哈哈哈哈')
    user_input()
    

    作业

    1. 提取data.json中的数据,将每条数据中的name、text、love和comment信息。并且保存到另外一个json文件中 。
    import json
    info = []
    with open('./data.json',encoding='utf-8') as f:
        str1 = json.load(f)
        for x in str1['data']:
            dict1 = {'name':x['name'],'text':x['text'],'love':x['love'],'comment':x['comment']}
            info.append(dict1)
    with open('./data_test.json','w',encoding='utf-8') as f:
        json.dump(info,f)
    
    data_test.png
    1. 统计data.json中comment数量超过1000的个数
    import json
    with open('./data.json',encoding='utf-8') as f:
        str1 = json.load(f)
        count  = 0
        for info in str1['data']:
           if int(info['comment']) > 1000:
               count += 1
    print(count)
    
    '''
    0
    '''
    
    1. 将data.json文件中所有点赞数(love)对应的值超出1000的用k来表示,例如1000修改为1k, 1345修改为1.3k
    import json
    
    with open('./data.json',encoding='utf-8') as f:
        str1 = json.load(f)
        update_info = {"code": 200,"data":[]}
        for love_test in str1['data']:
            if int(love_test['love']) > 1000:
                love_num ='%.1fk'% (int(love_test['love']) / 1000)
                love_test['love'] = str(love_num)
                update_info['data'].append(love_test)
            else:
                update_info['data'].append(love_test)
    
    with open('./new_data.json','w',encoding='utf-8') as f:
        json.dump(update_info,f)
    
    lave_count.png
    1. 写猜数字游戏,如果输入有误,提示重新输入,直达输入正确为止。比如:输入数字的时候没有按要求输入,提示重新输入
    import random
    
    numb = random.randint(1,100)
    while True:
        try:
            user_input = int(input('请输入数字:'))
        except:
            continue
        if user_input > numb:
            print('大了')
        elif user_input < numb:
            print('小了')
        else:
            print('OK')
            break
    '''
    请输入数字:50
    小了
    请输入数字:70
    小了
    请输入数字:90
    大了
    请输入数字:80
    小了
    请输入数字:85
    大了
    请输入数字:83
    大了
    请输入数字:82
    大了
    请输入数字:81
    OK
    '''
    
    1. 写学生管理系统的添加学生功能(数据需要本地化),要求除了保存学生的基本信息以外还要保存学生的学号,但是学号需要自动生成,生成原则:
      添加第一个学生对应的学号是:py001
      第二次添加的学生的学号是:py002
      ...
      如果前面的学生因为各种原因被移除了,那后面添加学生的时候原则不变,就是比如上次已经添加到py012,那么前面不管有没有删除情况,再次添加学生的学号是py013
    import json
    
    
    def add_student():
        try:
            user_name = input('请输入你的名字:')
            user_age = int(input('年纪:'))
            user_sex = input('性别:')
        except:
            add_student()
    
        stu = operation()
    
        if len(stu['student_info']) == 0:
            id = 0
        else:
            for x in stu['student_info']:
                id = x['id']
        stu_info ={'id':id+1,'name':user_name,'age':user_age,'sex':user_sex}
        stu['student_info'].append(stu_info)
        print(stu)
        main_write(stu)
    
    
    
    def operation():
        try:
            with open('./stu_system.json','r',encoding='utf-8') as f:
                str1 = json.load(f)
                return str1
        except FileNotFoundError:
            add_sys()
    
    
    def add_sys():
        with open('./stu_system.json', 'w', encoding='utf-8') as f1:
            info = {"class":"python1806","student_info":[]}
            json.dump(info,f1)
            operation()
    
    
    def main_write(stu):
        with open('./stu_system.json','w',encoding='utf-8') as f:
            json.dump(stu,f)
    
    add_student()
    '''
    {"class": "python1806", "student_info": [{"id": 1, "name": "txf", "age": 11, "sex": "nan"}, {"id": 2, "name": "aa", "age": 11, "sex": "bb"}]}
    '''
    

    相关文章

      网友评论

          本文标题:2018-09-03 day11 python 文件操作和异常捕

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