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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • 一、基本文件操作 1,基本过程:打开文件-操作-关闭文件 2,open(路径,打开方式,encoding=编码方式...
    fanzl阅读 287评论 0 0
  • 1.文件操作 1.基本过程:打开文件--操作--关闭文件2.open(路径,打开方式,encoding = "编码...
    汤姆猫是只疯猫阅读 191评论 0 1
  • 对一个人真正的放弃大概是,她不会删掉你QQ,更不会删掉你留言,也不会把你的电话拉入黑名单,只是她依旧留着你QQ却不...
    竹翁雨涵阅读 323评论 0 3
  • 子曰:“君子周而不比,小人比而不周。” 什么是小人?现在认为小人是溜须拍马,攀权附贵、两面三刀,阳奉阴违、挑拨离间...
    刘向雄_阅读 1,008评论 0 0
  • 亲爱的小孩: 好开心今天又是周六,又是我们每周一约的时间,而且今天还是一年一度的元宵佳节,此时此刻已经是北京时间2...
    范范的范阅读 252评论 0 1