文件处理和异常

1:异常处理

  • 程序运行中可能存在的错误,也就是报错
  • 异常处理的主作用是在程序运行的时候不会报错,而是在出现异常的时候执行指定的语句
  • 程序在运行过程中可能会出现一些错误。比如: 使用了不存在的索引,两个不同类型的数据相加…这些错误我们称之为异常
  • 处理异常 程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理
    ##1.1:异常的处理(捕获异常)
  • 把可能出错的代码找出来,同时指出出错代码的解决方法
    语法:
try:                              # try:尝试
    可能出错的代码
except <异常名1:要处理的异常>:    # except:除了
    <语句块:异常处理语句>
except<异常名2:要处理的异常>:
    <语句块:异常处理语句>
......
else:
    <语句块:未触发异常,执行该语句>
finally:                          # finally:最后
    <语句块:始终执行该语句,一般为了达到释放资源的目的>
  • 异常处理语句流程图:
开始
try语句
异常1处理语句
异常2处理语句
异常3处理语句
else语句
finally语句
结束

1.1:捕获异常的特性

  • 在捕获到异常之后,直接去到相应的处理语句处,处理异常,执行异常处理语句,不会再去执行异常语句之后的语句

2:异常的传播

  • 在调用函数的时候,如果函数体内出现了异常,那么就会把异常传递给调用的语句
  • 一般发生在函式的调用处
  • 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并显示异常信息。
  • 当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。而异常传播时,实际上就是异常对象抛给了调用处

2.1:异常传播的处理

  • 1:直接解决异常的源头错误
  • 2:在调用异常函数的调用处,处理异常
  • 两者都可以处理所用的异常,因为在调用处处理和在异常的源头处理异常的本质相同,只不过是形式不同*

2.2:没有处理异常语句

  • 那么异常的语句报错会一直传播,直到传播到主函数,若在传播过程中有一处地方解决了异常,则不会报任何错误

3:异常处理语句的本质

  • 异常的报错是一个类,所用报错异常的父类:Exception类

3.1:书写所用异常的缺点

  • 需要写出所有的异常报错,这样太过于繁琐
    语法:
try:
    <可能出现异常的代码>
except <出现错误的类型1>:
    <提示错误的类型1>
except <出现错误的类型2>:
    <提示错误的类型2>
except <出现错误的类型3>:
    <提示错误的类型3>
except <出现错误的类型4>:
    <提示错误的类型4>
except <出现错误的类型5>:
    <提示错误的类型5>
......

当有多个异常时,在捕获到第一个异常的时候,会直接跳转到相应的处理语句处,不会执行该语句下面的异常语句

3.2:通常处理异常的方法

  • 直接调用Exception类
  • 语法:
try:
    <可能出现异常的代码>
except exception as e:
    print(e, type(e))

好处:知道错误和错误的类型

4:文件的处理

  • 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作 文件也叫I/O(Input/Output)
  • 文件操作的步骤
    1:打开文件
    2:对文件进行各种操作(读、写)然后保存
    3:关闭文件
  • 若没有关闭文件,则会占用内存,会影响代码的运行性
  • 文件会有一个返回值。返回一个对象,这个对象就表示的是当前的文件

4.1:打开文件

4.1.1:准备一个文件

  • 需要对一个文件对象进行操作
  • 需要使用open()函数
    open(file, mode="r", encoding=None)
  • open函数的主要参数,都需要指定的参数
    1:file:文件对象
    2:mode:对文件的具体操作
    3:encoding:文件的编码格式

4.1.2:如何打开文件

  • open()函数打开文件的目录,默认是在和该程序相同的同一个文件夹下找
  • 若不在一个文件下,则要使用***绝对路径***来打开要打开的文件,再输入绝对路径时要使用原意字符“R或r”
  • 绝对路径的查找 copy path
  • open()函数中相对路径是无法打开文件的

4.2:文件的关闭

  • 对打开的文件进行关闭操作
  • 在文件关闭之后,需要在打开依次来确认文件是否真的关闭了
  • 使用close()函数可以关闭指定的函数

4.2.1:使用with语句关闭文件

  • with…as 语句不用写close()来关闭。它自带关闭
  • 语法:
with open(文件的地址, "对文件的操作", "文件的编码形式") as new_name:
    new_name.read() --->读取文件 

使用print()函数打开的只是一个文件的文件流

5:对文件的操作

  • 对文件的具体方法

5.1:文件的读取

  • 通过read()来读取文件的内容
  • 1:使用read()函数来读取文件
  • 2:统一使用“utf-8”的解码格式,养成习惯,因为不会出错

5.1.1:对不同文件类型的读取操作

  • 调用open()来打开一个文件,可以将文件分为2中类型
    • 1: 一种 纯文本文件(使用utf-8编码编写的文件)
    • 2: 一种 二进制文件(图片 mp3 视频…)
    • 3:open()打开文件时,默认是以文本文件的形式打开的 open()默认的编码为None。所以处理文本文件时要指定编码

5.1.2:分批量读取

  • 通过read()读取文件内容时会将文件中所有的内容全部读取出来。如果对于读取的文件比较大的话。会一次性的将文件加载到内容中。容易导致内存泄露。所以对于较大的文件。不要直接调用read()
    #####可以指定read()方法里面的size()来确定读取的字节数
  • read()可以接收一个size作为的参数。该参数用来指定要读取字符的数量。默认值为-1.-1也就是要读取全部的内容
  • 每次读取都会从上次读取到的位置开始。如果字符的数量小于size。则会读取所有的。如果读取到最后的文件。则会返回空串
  • readline()方法:
    一行一行的读
  • readlines()方法:
    一行一行的读,会读取完所有的内容,并且放在列表中

6:文件的写入

  • open()函数中的参数mode默认为只读“r”,如果要在文件中写入东西需要改变参数的类型

6.1:纯文本的写入操作

  • 文件写入需要的方法:write()方法
    write(“只能写入str类型,不能写入其它的类型”)
  • write()来向文件中写入内容
    该方法可以分多次向文件写入内容
    写入完成之后该方法会返回写入的字符的个数
  • 语法:
with open(file_name, "w", encoding="utf-8") as f
    f.writh("abc")
  • 注意:“w”的操作方法是重写,也就是会覆盖以前写的内容,但是一次性写入的东西不会覆盖,关闭文件之后,再写入东西就会覆盖
  • 使用open()函数打开文件时,必须要指定打开文件要做的操作(读、写、追加)。如果不指定操作类型,则默认是读取文件,而读取文件是不能向文件中写入
    1:r 表示只读
    2:w表示可以写。使用w写入文件时,如果文件不存在则会创建一个文件。如果文件存在则会覆盖原文件内容
常见文件的操作格式
操作方法描述
r以只读形式打开文件,文件的指针将会放在文件的开头
w以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有的内容,文件指针放在文件的开头
a以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件的末尾追加内容,文件指针在原文件末尾
b以二进制模式打开文件,不能单独使用,需要与其它模式一起使用,rb或者wb,声音、视频和图片都是二进制类文件
+以读写模式打开文件,不能单独使用,需要与其它模式一起使用,a+
文件操作的常用方法
方法名描述
read(size)从文件中读取size个字节或字符的内容返回,若省略([size]),则读取到文件末尾,即一次读取文件的全部内容
readline()从文件中读取一行的内容
Readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write()将字符串str内容写入文件
writelines(s_list)将字符串列表s_list写入文本文件,不添加换行符

6.2:二进制文本的写入操作

  • 读取文本文件时,size是以字符为单位。读取二进制文件时,size是以字节为单位
  • 打开文件或操作文件需要使用文件的地址,而地址需要使用原意字符
  • 读取:
    二进制的读取需要使用“rd”操作,只用字节读,1024为1M
    二进制的写入需要使用“wd”操作,只用字节读,1024为1M

6.2.1:将读取的二进制文件,重新写入另一个文件

  • 需要使用with循环

课外知识

  • 声音文件的后缀名有:mp3、mp4
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值