美文网首页
2018-09-03 文件操作(day11)

2018-09-03 文件操作(day11)

作者: naruto711 | 来源:发表于2018-09-03 18:55 被阅读0次

    一、文件操作

    1.基本过程:打开文件 ---->文件操作 ----> 关闭文件

    2.open(路径,打开方式,编码(encoding=编码方式))

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

    3.文件的读和写

    read()/readline()---读
    write()--- 写

    4.关闭

    f.close()

    '''
    1.打开文件和关闭文件的简写方式(常用的):
    with open() as 文件变量名:
        文件操作
        
    文件打开操作完成后,会自动关闭文件
    '''
    
    if __name__ == '__main__':
        with open('./TIM图片20180903095326.png','rb') as f:
            # bytes是python中内置的数据类型,来表示二进制数据
            content = f.read()
            print(content)
        # 将二进制数据写入文件(下载图片)
        with open('./魏世强.png','wb') as ff:
            ff.write(content)
    

    二、json文件

    定义:

    • json是有特定格式的一种文本形式,它有自己的语法
    • json文件后缀是 .json的文本文件
    • json不同于python 代码用双引号

    1.json格式对应的数据类型及其表现

    • a.一个json文件中只能存一个数据,这个数据的类型必须是以为类型中的一个
    • b.python对json数据的支持
    类型 格式 python
    对象(object) {"abc":10,"b":[1,2]} 字典(dict)
    数组(array) [100,"abc",true,[1,2]] 列表(list)
    数字(number) 0,100,2.1,-200 整型(int)浮点型(float)
    字符串(string) "abc","hello json" 字符串(str)
    布尔(bool) true/false(必须小写) 布尔(bool)/True,False
    特殊值(Null) null None

    1.load(json文件对象): 以json的格式,获取文件中的内容。将内容转换成相应的python数据
    2.loads(json格式内容的字符串, 编码方式):将json格式的字符串,转换成python对应的数据

    3.dump(需要写入json文件中的python数据, json文件对象)
    4.dumps(需要转换成json格式字符串的python数据)

    # json模块是python中内置的,专门用来处理json数据的一个模块
    import json
    
    if __name__ == '__main__':
    
        # 1.json转python数据
    
        """
        with open('./files/json1.json', 'r', encoding='utf-8') as f:
            content = json.load(f)
            print(content)
            print(type(content))
    
        content1 = json.loads('{"a":100, "abc":true}', encoding='utf-8')
        print(content1, type(content1))
    
        """
        with open('./files/new.json', 'w', encoding='utf-8') as f:
            json.dump({'a':100, 'hn': 200, 'abc': None}, f)
            # json.dump([1, 2, 3, 'abc'], f)
            # json.dump((1, 2, 'abc', 100, True), f)
            # 注意:python中集合不能转换成json数据
            # json.dump({11,22,'aa'}, f)
    
        # 将python数据,转换成json字符串
        json_str = json.dumps([2, 3, 4, 'abc', True, None])
        print(json_str, type(json_str))
    
        # 练习,用json文件来保存一个班的班级信息,包括班级名和班上的所有的学生(名字、年龄和电话)
        # 输入学生信息添加学生
        # 根据姓名删除学生
        # (做到数据持久化)
        """
        json文件的数据格式
        {
            "class_name":"班级名",
            "all_students":[
                {"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)
    
        # 2.输入信息添加数据
        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
        #     ]
        # }
        # 3.将最新的数据写入文件中
        with open('./files/class_info.json', 'w', encoding='utf-8') as f:
            json.dump(class_content, f)
    

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

    三、异常捕获

    1.

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

    2.怎么捕获异常

    形式 try except except finally 其他语句
    形式1(捕获所有异常) 需要捕获异常的代码块(可能会出现异常的代码块) 出现异常后执行的代码
    形式2 加错误类型
    形式3 加(错误类型1,错误类型2....)
    形式4 加(错误类型1) 加(错误类型2)
    形式5 出现异常后执行的代码 不管有没有异常都会执行(就算崩溃了也会执行)(在这儿做程序异常退出时的善后,一般做保存数据和进度的工作)

    注意:
    形式1:

    • 执行过程: 执行try后面的代码块,一旦遇到异常,就马上执行except后面的代码块。执行完后再执行其他的语句。
    • 如果try里面的代码块没有出现异常,就不执行except后面的代码块,而是直接执行其他语句
      形式2:
    • 执行过程: 执行try后面的代码块,一旦遇到指定的错误类型的异常,就马上执行except后面的代码块。执行完后再执行其他的语句。
    • 如果try里面的代码块没有出现指定的异常,就不执行except后面的代码块,而是直接执行其他语句

    3.抛出异常(后面补充)

    raise 错误类型

    if __name__ == '__main__':
        import json
        # 抛出异常,让程序主动崩溃
        num = input('请输入一个奇数:')
        if int(num) % 2 == 0:
            raise KeyError
    
    
        try:
            print('abc')
            print([1,2,3][4])
            print(int('abc'))
        except ValueError:
            print('出现异常')
        finally:
            print('最后的语句')
    
        # 1.什么情况....
        # a.输入两个数,然后求这个两个数的商是多少
        num1 = float(input('除数:'))
        num2 = float(input('被除数:'))
        print('%f / %f = %f' % (num1, num2, num1/num2))
    
        # b.打开一个不存在的文件,不希望程序崩溃,只是让读出的内容是空
        with open('./files/info.json', 'r', encoding='utf-8') as f:
            content = json.load(f)
    
    
        # 2.捕获异常
        # try-except
        a = [1, 2, 3, 4, 5]
        try:
            print(int('abcd'))
            print(a[6])
        except:
            print('下标越界')
        print('===========')
    
    
        dict1 = {'a':1, 'b': 2}
        try:
            print(a[6])
            dict1['c']
        except IndexError:
            print('下标越界2')
        except KeyError:
            print('key错误')
    

    相关文章

      网友评论

          本文标题:2018-09-03 文件操作(day11)

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