版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师:单
位:Python程序设计方法第6章文件与异常第6章文件和异常6.1文件6.2异常第6章文件和异常6.1文件6.1文件1.文件类型2.数据访问方式文本文件:文本编码的数据,如ASCII或Unicode编码等,可以使用文本编辑器打开、查看;二进制文件:存储的数据仅适用于程序读取,无法使用文本编辑器查看;顺序存取文件:必须要按照从前到后的顺序访问文件中的数据,即如果想读取存储在文件末尾的数据,那么必须先读取在它之前的所有数据;直接存取文件:也称作随机访问文件,是指可以直接跳转到文件中的任何数据,而无须读取它之前的数据;6.1.1文件对象1.文件扩展名2.文件对象文件的命名通常是由计算机操作系统的文件命名规则所决定的,大多数系统支持使用文件扩展名的方式命名;出现在一个文件名之后的有一个句点(被称为“点”)的短字符序列,通常表示存储在文件中的数据类型,如.jpg、.txt、.doc;文件对象是与特定文件相关联的一个对象在程序中使用一个变量引用文件对象,那么该变量就可用于执行在文件上的任何操作6.1.1文件对象2.文件对象(续)图6-1变量名引用与文件相关联的一个文件对象6.1.2文件读写操作1.输出文件描述数据写入的一个文件,程序将输出数据到该文件;将数据保存到文件中的过程称为“写入数据”到文件,当数据写入到一个文件中即它从内存中的变量复制到文件图6-2向文件写入数据6.1.2文件读写操作2.输入文件描述数据读取的一个文件,程序将从文件中得到输入;文件中读取数据的过程称为从文件中“读取数据”,当数据从一个文件中读取即它从文件中复制到内存中并由一个变量引用图6-3向文件读取数据6.1.2文件读写操作3文件操作一般步骤第一步:打开文件
创建一个文件和程序之间的连接,即文件对象。打开输出文件通常会在磁盘上创建文件,并允许程序向其写入数据。打开输入文件允许程序从文件中读取数据;第二步:处理文件
将数据写入文件(如果是输出文件)或从文件中读取(如果是输入文件);第三步:关闭文件
程序使用文件完成后,该文件必须关闭。关闭文件会断开文件与程序的连接。6.1.2文件读写操作4使用Python打开文件
使用open函数打开文件:创建一个文件对象将其与磁盘上的文件相关联。使用open函数的一般格式为:file_variable=open(filename,mode)
其中:
file_variable表示引用该文件对象的变量名;
filename指定文件名称的一个字符串;
mode指定文件以何种模式(读、写等)打开的一个字符串6.1.2文件读写操作4使用Python打开文件(续)
表6-1Python中打开文件的模式模式描述'r'以只读方式打开文件。文件不能修改或者写入'w'以写入方式打开文件。如果文件已经存在,则清除其内容;如果文件不存在,则创建它'a'以追加方式打开文件。所有写入文件的数据将追加到文件末尾。如果文件不存在,则创建它6.1.2文件读写操作5使用Python处理文件——将数据写入文件
使用文件对象的write方法将数据写入一个文件,调用write方法的一般格式为:file_variable.write(string)
其中:
file_variable是引用一个文件对象的变量string表示一个即将写入文件的字符串*前提是该文件必须以写的模式(用'
w'或者'
a'模式)打开,否则会发生错误;6.1.2文件读写操作5使用Python处理文件——从文件读取数据
使用文件对象的read方法,会将文件中的内容以字符串的形式返回,一般格式为:file_contents=file_variable.read()
其中:
变量file_contents表示以字符串形式返回文件中读取的内容
*前提是该文件已经被打开准备读取(用'
r'模式)Python中提供的readline方法可以实现从文件中每次仅读取一行(以\n字符结尾的字符串)。该方法以字符串的形式返回一行,调用格式与read方法类似。6.1.2文件读写操作5使用Python处理文件——关闭文件
一旦程序处理完文件后,应断开程序与文件的连接,即关闭文件;
关闭输出文件的过程就是强制将在缓冲区中剩余的任何未保存的数据写入文件使用文件对象的close方法关闭文件,一般格式为:file_variable.close()
6.1.2文件读写操作6文件内容追加——使用'
a'模式打开输出文件
当使用'
w'模式打开输出文件并且该文件名指定的文件已经存在于磁盘上,已有的文件将被删除,并且创建一个具有相同名称的新的空文件;如果想保留一个现有的文件并追加新数据到该文件中,可以使用'
a'模式以追加模式打开输出文件:
如果文件已经存在,它不会被删除。如果文件不存在,那么它将会被创建出来;当数据写入文件中时,它会写在该文件当前内容的末尾;
6.1.2文件读写操作7with语句简化文件操作
with语句执行文件打开操作,实现预定义清理操作,文件在使用后将自动关闭而不再需要关闭文件的步骤。with语句的基本格式:
withexpression[asobject]:
<对象操作语句>
例如新建一个文本文件one_city.txt,在文件中输入文本Hangzhou,在同一目录下编写如下代码:
defmain():
withopen('one_city.txt','r')asinfile:print(infile.readline())main()6.1.2文件读写操作8使用循环处理文件——
while循环readline方法在读取文件末尾之外的内容时会返回空字符串('
'),可以使用while循环来确定何时到达文件的末尾。算法的伪代码如下:OpenthefileUsereadlinetoreadthefirstlinefromthefileWhilethevaluereturnedfromreadlineisnotanemptystring:ProcesstheitemthatwasjustreadfromthefileUsereadlinetoreadthenextlinefromthefileClosethefile6.1.2文件读写操作8使用循环处理文件——
while循环(续)伪代码在进入while循环之前先调用了readline函数,该函数可以得到文件的第一行内容,可以进行循环测试,算法流程图如下所示:图6-4检测读取位置是否到达文件末尾的流程图6.1.2文件读写操作8使用循环处理文件——
for循环Python语言中还提供了一个for循环,可以自动读取文件中的每一行而无须检测文件末尾的任何特殊条件。for循环不需要启动读取操作,并且在到达文件末尾时它会自动停止。一般格式为:
forvariableinfile_object:<语句><语句>
其中:variable是变量的名称,file_object是引用文件对象的变量;该循环将在文件中的每一行上迭代一次:第1次循环迭代时,variable将引用文件中的第1行(作为字符串),第2次循环迭代时,variable将引用第2行,以此类推;第6章文件和异常6.2异常6.2.1异常1异常在程序运行时发生的错误,一般会导致程序突然停止traceback:程序运行中产生的错误信息,涉及到导致异常的行号(一个或多个)信息
错误的最后一行信息会显示所引发的异常名称和引发该异常的错误的简要说明(如整数除零或模零),如下所示:6.2.1异常1异常(续)许多异常可以通过仔细编写程序来避免,例如:输入验证
ifnum2!=0:result=num1/num2print('num1/num2',result)else:print('Cannotdividebyzero')但有些异常是不能通过仔细编码来避免的,例如:
程序要将非数字字符串转换为整数;
程序要打开以读取不存在的文件;6.2.1异常1异常(续)异常是一个Python对象,表示一个错误,当Python脚本发生异常时,需要捕获处理它,否则程序会终止执行。异常是程序出现了错误为排除错误而在正常控制流之外采取的行为(动作)。这个行为动作又分为两个阶段:
第一阶段:检测异常,Python解释器将触发一个异常信号,程序也可以自己引发异常信号。只要有异常(信号),解释器都要暂停当前正在执行的程序,而去处理因为错误引发的异常,即转入第二阶段的工作;
第二阶段:处理异常,它包括忽略错误或采取补救措施让程序继续执行。无论是哪种方式都代表执行的继续,也可以把这种工作看作是程序控制流的一个控制分支;
6.2.1异常2使用try-except语句捕获异常使用try/except语句来捕获异常,这样的代码称为异常处理句柄。try/except语句的格式可以有多种,但最简单的一种形式为:
try:
<语句>
except异常名称:
<语句>
其中:
关键字try及其后面的语句块称为try语句块;之后一个except语句出现,except语句以关键字except开始,可选择地跟一个异常的名字,并用冒号结束,下一行开始的语句块称为“句柄”;6.2.1异常2使用try-except语句捕获异常(续)上述这种格式用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。当try/except语句执行时,在try语句块中的语句开始执行,之后:
如果try语句块中的一个语句抛出了由except语句指定的名称的异常,则该句柄立即执行except语句。然后,程序会在try/except语句之后的一条语句处继续执行;
如果try语句块中的一个语句抛出的异常不是except语句指定名称的异常,然后程序会输出traceback错误消息并停止;
如果try语句块中的语句执行中没有抛出异常,则任何except语句和句柄会被忽略,并且程序会在try/except语句之后的一条语句处继续执行;6.2.1异常3处理多个异常:使用except语句捕获所有异常在许多情况下,try语句块中的代码可能会抛出多种类型的异常,需要为每个类型的异常编写一个except语句来处理。如果异常的类型太多而无法或者不便一一列举,可以使用except语句(不需要加异常名称)来捕获所有异常。这种形式如下所示:
try:
<语句>
except异常名称1:
<语句>
except异常名称2:
<语句>............
except:
<语句>6.2.1异常4显示异常的默认错误信息当抛出一个异常时,一个称为异常对象的对象将在
内存中创建出来
异常对象通常包含该异常的默认错误消息,编写except语句时,能够可选地为异常对象分配一个变量,如下所示:exceptValueErrorasvariable:
这个except子句捕获了ValueError异常。出现在except语句之后的表达式表示将异常对象赋值给变量variable。然后可以在异常句柄中将变量传递给print函数来显示Python为该类错误提供的默认错误消息。6.2.1异常5else语句try/except语句中有一个可选的else语句,出现在所有的except语句之后,一般使用形式为:
try:
<语句>
except异常名称:
<语句>
else:
<语句>
出现在else语句后的语句块称之为else语句块。else语句块中的语句在try语句块之后并且只有在没有引发异常时才会执行。如果引发了异常,else语句块将会跳过;6.2.1异常6finally语句try/except语句有一个可选的finally语句,它必须出现在所有的except语句之后,一般使用形式为:
try:
<语句>
except异常名称:
<语句>finally:
<语句>
出现在finally语句后的语句块称之为finally语句块。finally语句块中的语句总是在try语句块和所有异常句柄执行完后才执行。无论是否有异常发生,finally语句块中的语句总会执行,比如关闭文件、释放锁等;6.2.1异常7with语句with语句是在python2.5后的版本中得到支持的。在之前的版本中,如果要正确处理程序中存在的异常,则需要使用try...finally代码结构。with语句可用于对资源进行访问,不管在使用过程中是否发生异常都会执行必要的“清理”工作,释放资源,因此with语句可用来简化这种写法。这里明确with语句后的表达式为上下文表达式,如下所示:
with上下文表达式[asobject]:
<对象操作语句>
6.2.1异常7with语句(续)例如,读取文件内容:
f=open('city.txt')try:forlineinf.readline():print(line)finally:f.close()
withopen('city.txt')asf:forlineinf.readline():print(line)
使用try/finally语句使用with语句6.2.1异常7with语句(续)改写后的代码相对try/finally语句块来说简洁了很多,而且也不需要使用f.close()语句关闭文件。因为with语句具有上下文管理器的功能。上下文管理器是一个实现了上下文协议的类,而所谓的上下文协议就是一个类要实现__enter__()和__exit__()两个方法。
__enter__()方法主要执行一些环境准备工作,同时返回一个资源对象,例如上下文管理器open('city.tx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河南公开选聘事业单位工作人员考试(交通行政执法知识)考前冲刺试题及答案
- 2026江西军转干统一考试(计算机)复习题及答案
- 2025年云南省楚雄州遴选公务员综合能力测试+综合知识自测试题及答案解析
- 2025年天津物业管理师职业技能鉴定考试(技能实操中级、四级)试题及答案
- 2025年江西军队转业干部考试(英语)测试题及答案
- 2026年下载视力测试题及答案
- 2026年苏教小学数学测试题及答案
- 2026年霸道指数测试题及答案
- 2026年基层团建知识测试题及答案
- 2026年环保生活小测试题及答案
- 2026杭州市临安区事业单位招聘45人笔试备考题库及答案详解
- 2026年自然资源部信息中心招聘在职人员易考易错模拟试题(共500题)试卷后附参考答案
- 2026年文化传媒居间合同协议条款详解
- 综合能源服务创新发展报告(2025)-能源环境服务产业联盟(EESIA)
- 2025-2026苏教版三年级数学下册第五单元长方形和正方形综合测试卷(含答案)
- 雨课堂学堂在线学堂云《现代农业创新与乡村振兴战略(扬州)》单元测试考核答案
- AutoCAD 2016基础与应用案例教程
- 北京市东城区东直门中学2026届生物高一下期末教学质量检测试题含解析
- 《老年病科临床诊疗指南(2025版)》
- 人民调解枫桥经验培训课件
- GB/T 21866-2025涂膜抗病毒活性和抗菌性测定法
评论
0/150
提交评论