《Python上文件》PPT课件.ppt_第1页
《Python上文件》PPT课件.ppt_第2页
《Python上文件》PPT课件.ppt_第3页
《Python上文件》PPT课件.ppt_第4页
《Python上文件》PPT课件.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章 文件与异常处理,本章介绍Python的文件操作(重点介绍文本文件的操作)、目录操作,以及Python的异常处理机制,最后介绍如何使用pdb模块调试Python程序。,5.1 文件的基本操作,5.1.1 打开文件 使用文件之前,须首先打开文件,然后进行读、写、添加等操作。Python打开文件使用open函数,其语法格式为: open(name,mode,buffering) 其中,文件名(name)为必选参数,模式(mode)和缓冲(buffering)参数是可选的。该函数返回一个文件对象。,【例5-1】 打开一个文本文件。 f = open(r“C:Userstest.txt“) 上述语句直接打开一个指定的文件,如果文件不存在则创建该文件。 这里的f是一个文件对象,它与指定的文件建立了关联,很多文献称f为文件描述符。 实际上它可视为指定文件的“句柄”,所有对指定文件的后续操作都将通过这个句柄进行,直到使用后面将要介绍的close()函数关闭指定文件为止。,open函数模式参数表,模式参数组合及其描述,open函数缓冲参数表,5.1.2 关闭文件,文件使用完毕后应及时关闭。在Python中关闭文件用close方法。 通常来说,Python会在一个文件不用后自动将其关闭,不过这一功能没有保证,因为Python可能会缓存写入的数据,如果程序因为某种原因崩溃,数据就有可能没有完整地写入到文件中,从而引发文件故障。 【例5-2】关闭文本文件。 要关闭【实例5-1】中的f文件对象,可以使用如下语句: f.close(),5.1.3 在文本文件中读取数据,在文本文件中读取数据的语法格式为: f.read(size) #size为读取的长度,以byte为单位 f.readline(size) #读一行,如果定义了size,有可能返回的只是一行的一部分 f.readlines(size) #把文件每一行作为list的一个成员,并返回这个list。,【例5-3】读取文本文件内容。 假设在C:Users目录下有一个文本文件test.txt,文本内容为“Hello World!”。,5.1.4 创建文本文件,在Python中,以追加模式打开文本文件即可创建此文件,语法格式为: open(name, a ,buffering) #创建空文件 【例5-4】创建文本文件。 在当前目录下创建一个文本文件text.txt,可使用语句: f = open(rC:Userstext.txt,a),5.1.5 向现有文件中添加数据,向文件中写入数据的函数是write()和writelines(),其语法格式为: f.write(str) #把str写到文件中,write()并不会在str后加上一个换行符 f.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。,【例5-5】向文本文件中添加数据。 假设我们向D:xunliantest.txt文件中写入数据,可以使用下列语句: 其中的17表示向文本文件test.txt中写入了17个字符。,5.1.6 文件指针,对文件操作时,文件内部会有一个文件指针来定位当前位置,控制文件指针位置可以实现重复读取,用seek方法可以控制文件指针的位置,其语法格式为: seek(offset, whence) #移动文件指针 各参数含义如下: offset:偏移量。一般是相对于文件的开头来计算的,一般为正数。 whence:偏移相对位置。whence可以为0,表示从头开始计算,为1则表示以当前位置为原点计算,为2则表示以文件末尾为原点进行计算。 偏移相对位置常量有SEEK_SET、SEEK_CUR、SEEK_END: os.SEEK_SET:表示文件的起始位置,即0(默认情况),此时offset必须为0或正数。 os.SEEK_CUR:表示文件的当前位置,即1,此时offset可以为负数。 os.SEEK_END:表示文件的结束位置,即2,此时offset通常为负数。,欲获取文件指针位置,可以使用tell方法,其语法格式为: f.tell() #返回文件操作标记的当前位置,以文件的开头为原点 【例5-6】获取文件指针当前位置。 上一例中,text.txt文件中文本内容为“Welcome to China!”,若第二次读取则会输出 ,可以使用seek函数使其从头开始读取:,5.1.7 截断文件,截断文件使用truncate方法,把文件截成规定的大小,默认的是截到当前文件操作标记的位置。截断文件的语法格式为: f.truncate(size) 如果size比文件的大小还要大,依据系统的不同,可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是把一些随机的内容加上去。,【例5-7】截断文件。 在text.txt文件中又写入一行:“Thank you very much!”,看截断后能否再输出:,5.1.8 复制、删除、移动、重命名文件,复制文件使用shutil模块中的方法,方法有copy,copyfile,copytree。下面分别对每个方法进行说明。 shutil.copy(src, dst) #复制数据从src到dst(src为文件,dst可以为目录) shutil.copyfile(src, dst) #复制数据从src到dst(src和dst均为文件) shutil.copytree(src, dst) #递归复制文件夹,其中src和dst均为目录,且dst不存在。,删除文件使用os模块中的remove方法。 os.remove(path) #path为文件的路径名 移动文件使用shutil模块中的move方法, shutil.move(src, dst) #移动数据从src到dst,src和dst可以为文件,也可以为目录。 重命名文件或目录使用os模块的rename方法, os.rename(old, new) #old为原文件名,new为更改后的文件名。,【例5-8】使用copy函数复制文件。 在copy函数中,如果dst是文件夹,则是把src文件复制到其文件夹中,dst为文件时,则是把src文件复制到dst文件中,即复制+重命名。 【例5-9】使用copyfile函数复制文件。 使用copyfile函数的前提是目标文件具有写权限,否则将产生IoError错误。我们使用glob(pathname)函数返回所有匹配的文件路径列表,这里既可以是绝对路径,也可以是相对路径。,【例5-10】使用copytree函数复制文件。 【例5-11】文件删除。 使用remove()函数删除D:practice目录下的text.txt文件: import os os.chdir(rD:practice) os.remove(text.txt),【例5-12】文件移动。 使用move方法将文件或文件夹移动到另一目录,使用glob函数获得文件路径。 【例5-13】文件重命名。 我们把当前目录下的文件text.txt重命名为text1.txt,使用的语句为: os.rename( “text.txt“, “text1.txt“ ),5.2 指定目录下的文件操作,5.2.1 获取当前目录 获取Python当前脚本运行目录的方法为getcwd(),其语法格式如下: os.getcwd() 【例5-14】得到当前工作空间的目录。,5.2.2 获取当前目录下的内容,获取当前目录下所有的文件和目录名是用os模块下的listdir方法,其语法格式为:os.listdir() 【例5-15】获取指定文件夹下面的所有文件及文件夹, 如果指定的文件夹不存在,则返回相应的提示信息。 import os def listdir(dir_path): if os.path.exists(dir_path): return os.listdir(dir_path) else: return 目录+ dir_path + 不存在 if _name_ = “_main_“: f=listdir(r“d:practice“) #该目录存在 print(f) f=listdir(r“d:practices“) #该目录不存在 print(f) 将上述代码放入一个程序中,运行结果为:,5.2.3 创建、删除目录,创建单个目录的语法格式为: os.mkdir(“file“) 删除目录有两种方法,分别调用os模块的rmdir方法和shutil的rmtree方法,不同的是前者只能删除空目录,而后者空目录和非空目录均可删除。 os.rmdir(“dir“) #只能删除空目录 shutil.rmtree(“dir”) #空、非空目录都可删,【例5-16】创建新目录。 import os os.mkdir(rD:newdir) 【例5-17】删除空目录。 import os os.rmdir(rD:newdir),【例5-18】使用rmtree函数删除目录。 import shutil dir_path = rD:test shutil.rmtree(dir_path),5.3 异常处理,5.3.1 异常 异常是一个事件,此事件会在程序执行过程中发生,影响程序的正常执行。一般情况下,Python在无法正常处理程序时就会产生异常。 Python用异常对象(exceptionobject)表示异常情况。当发生异常时,我们需要捕捉它,否则程序会用回溯(traceback)停止运行。 在Python中标准异常情况如下表所示。,5.3.2 try、else、finally语句,捕捉异常可以使用try、except、else、finally语句。 try/except语句用来检测try语句块中的错误,从而使except语句捕捉异常信息并处理,若使程序不在异常发生时就停止运行,只需在try中捕捉它。 try/except/else语法如下: try: #运行别的代码 except #如果在try部份引发了name异常 except , #如果引发了name异常,获得附加的数据 else: #如果没有异常发生 finally: #不管try子句内部是否有异常发生,都会执行语句,try语句的工作流程为: (1)当遇到一个try语句后,Python就在当前程序的上下文作标记,当出现异常时可以较快回到这里,再执行try子句,然后执行什么取决于运行过程中是否出现异常。 (2)如果当try后的语句执行时发生异常,Python就跳回到try并执行第一个匹配该异常的except子句。异常处理完毕后就继续运行(除非在处理异常时又引发新的异常)。 (3)如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被提交到上层的try,或者到程序的最上层(这样将结束程序,并显示缺省的出错信息)。 (4)如果在try子句执行时没有异常发生,Python将执行else语句后的语句(如果有else的话),然后程序通过整个try语句并继续运行。 (5)不论是否发生异常,finally子句一定会被执行。,【例5-36】使用try/except关键字捕捉异常。 try: print(8/0) except ZeroDivisionError: print(除数不能为0) 将上述代码放入一个程序中,运行结果为: 【例5-37】捕捉多个异常,并将多个异常以元组形式列出。 try: print(8/0) except(ZeroDivisionError,Exception): print(发生了一个异常) 将上述代码放入一个程序中,运行结果为:,【例5-38】组合使用try/except/else/finally子句进行异常处理。 try: print(8/0) except(ZeroDivisionError,Exception): print(发生了一个异常) else: print(正常运行) finally: print(cleaning up) 将上述代码放入一个程序中,运行结果为:,5.3.3 触发异常和自定义异常,异常可以在某些地方出错时自动引发,下面介绍一下自己是如何引发异常的,并且介绍一下如何创建自己的异常类型。 在Python中使用raise关键字触发异常, def ThorwErr(): raise Exception(“抛出一个异常“) #Exception:抛出一个异常 ThorwErr() Raise关键字触发的是一个通用的异常类型(Exception),一般来说触发的异常越详细越好,Python中内建了很多异常类型,可以通过dir函数查看异常类型。 【例5-39】使用dir函数查看Python内建模块builtins中的异常类型。,在Python中可以自定义特殊类型的异常,只是要确保从Exception类继承(不管是直接还是间接)。 【例5-40】自定义异常类。 class SomeCustomException(Exception): pass,5.3.4 使用sys模块返回异常,在Python中另一种获取异常信息的方式是通过sys模块中的exc_info()函数,此函数会返回一个三元组:(异常类,异常类的实例,跟踪记录对象)。 【例5-41】使用exc_info()函数返回异常。 try: 8/0 except: import sys t = sys.exc_info() print(t) for i in t: print(i) 将上述代码放入一个程序中,运行结果为:,5.4 使用pdb模块调试程序,在Python中,语法错误可以由Python解释器发现,但逻辑错误或变量使用错误却不容易发现,若结果不符合预期,则需要进行调试。Python自带的pdb模块也是一个很好的调试工具,使用它可以为脚本设置断点、单步执行、查看变量值等。 【例】使用dir函数查看pdb模块内建函数,5.4.1常用的pdb函数,1.pdb.run()函数 pdb.run()函数主要用于调试语句块,其基本语法如下: run(statement,globals=None, locals=None) 参数含义:statement-要调试的语句块,以字符串形式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论