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

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

作者: 汤姆猫是只疯猫 | 来源:发表于2018-09-03 17:40 被阅读0次

    1.文件操作

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

    #读二进制文件(上传文件)
    with open('./files/timg.jpg','rb') as f :
        #bytes是python中内置的数据类型,用来表示二进制数据
        content = f.read()
        print(type(content))
        print(content)
    
    
        #将二进制数据写入文件
    with open('./files/new.jpg','wb') as f1:
        f1.write(content)
    
    

    2.json文件

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

    1.json格式对应的数据类型及其表现
    一个json文件中只能存一个数据,这个数据的类型必须是以下类型中的一个
    类型: 格式: 意义:
    对象(object): {"a":10,"b":[1,2]} 相当于字典
    数组(array): [100,"asd",true,[1,2]] 相当于列表,里面的元素可以是任何类型
    数字(number): 100 3.14 包含整数和小数
    字符串(string): "asd","hello json"
    布: 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文件对象)
    dumps(需要转换成json格式字符串的python数据)
    json转python数据

    with open('./files/json1.json','r',encoding='utf-8') as f:
        content = json.load(f)
        print(content)
        print(content["a"])
    
    

    python转json数据
    python ---> json
    字典 对象
    列表,元组 数组
    将python数据,转换成json字符串

    json_str = json.dumps([2,3,4,'asd,True'])
    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)
    
    name = input("姓名:")
    age = input("年龄:")
    tel = input("电话:")
    stu = {"name":name,"age":int(age),"tel":tel}
    class_content["all_students"].append(stu)
    # class_info = {
    #     "calss_name":"python1806",
    #     "all_students":[
    #         stu
    #     ]
    # }
    
    #将最新的数据写入文件中
    with open("./files/class_info.json","w",encoding="utf-8") as f:
        json.dump(class_content,f)
    
    
    del_name = 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 del_name == 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)
    

    数据的持久化
    1.将数据从文件中读出来
    2.修改数据(增,删,改)
    3.将新的数据再写入文件中

    3.异常捕获

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

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

    形式2:
    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 错误类型
    a.输入两个数,然后求在这两个数的商是多少

    import json
    num1 = float(input("除数:"))
    num2 = float(input("被除数:"))
    print("%f / %f = %f" % (num2,num1,num2/num1))
    

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

    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 IndentationError:
        print("文件不存在")
    
    

    2.捕获异常

    #try-except
    a = [1,2,3,4,5]
    try:
        print(int("asd"))
        print(a[6])
    except:
        print("捕获异常")
    print("*********")
    
    dict1 = {"a":1,"b":2}
    try:
        dict1["c"]
    except (KeyError,IndexError):
        print("错了")
    

    相关文章

      网友评论

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

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