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

一、文件操作

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))