Python(上)文件.ppt_第1页
Python(上)文件.ppt_第2页
Python(上)文件.ppt_第3页
Python(上)文件.ppt_第4页
Python(上)文件.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 Users test 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 文本内容为 HelloWorld 5 1 4创建文本文件 在Python中 以追加模式打开文本文件即可创建此文件 语法格式为 open name a buffering 创建空文件 例5 4 创建文本文件 在当前目录下创建一个文本文件text txt 可使用语句 f open r C Users text txt a 5 1 5向现有文件中添加数据 向文件中写入数据的函数是write 和writelines 其语法格式为 f write str 把str写到文件中 write 并不会在str后加上一个换行符f writelines seq 把seq的内容全部写到文件中 多行一次性写入 这个函数也只是忠实地写入 不会在每行后面加上任何东西 例5 5 向文本文件中添加数据 假设我们向D xunlian test 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文件中文本内容为 WelcometoChina 若第二次读取则会输出 可以使用seek函数使其从头开始读取 5 1 7截断文件 截断文件使用truncate方法 把文件截成规定的大小 默认的是截到当前文件操作标记的位置 截断文件的语法格式为 f truncate size 如果size比文件的大小还要大 依据系统的不同 可能是不改变文件 也可能是用0把文件补到相应的大小 也可能是把一些随机的内容加上去 例5 7 截断文件 在text txt文件中又写入一行 Thankyouverymuch 看截断后能否再输出 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文件 importosos chdir r D 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 获取指定文件夹下面的所有文件及文件夹 如果指定的文件夹不存在 则返回相应的提示信息 importosdeflistdir dir path ifos path exists dir path returnos 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 创建新目录 importosos mkdir r D newdir 例5 17 删除空目录 importosos rmdir r D newdir 例5 18 使用rmtree函数删除目录 importshutildir path r D test shutil rmtree dir path 5 3异常处理 5 3 1异常异常是一个事件 此事件会在程序执行过程中发生 影响程序的正常执行 一般情况下 Python在无法正常处理程序时就会产生异常 Python用异常对象 exceptionobject 表示异常情况 当发生异常时 我们需要捕捉它 否则程序会用回溯 traceback 停止运行 在Python中标准异常情况如下表所示 5 3 2try 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 exceptZeroDivisionError 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 cleaningup 将上述代码放入一个程序中 运行结果为 5 3 3触发异常和自定义异常 异常可以在某些地方出错时自动引发 下面介绍一下自己是如何引发异常的 并且介绍一下如何创建自己的异常类型 在Python中使用raise关键字触发异常 defThorwErr raiseException 抛出一个异常 Exception 抛出一个异常ThorwErr Raise关键字触发的是一个通用的异常类型 Exception 一般来说触发的异常越详细越好 Python中内建了很多异常类型 可以通过dir函数查看异常类型 例5 39 使用dir函数查看Python内建模块builtins中的异常类型 在Python中可以自定义特殊类型的异常 只是要确保从Exception类继承 不管是直接还是间接 例5 40 自定义异常类 classSomeCustomException Exception pass 5 3 4使用sys模块返回异常 在Python中另一种获取异常信息的方式是通过sys模块中的exc info 函数 此函数会返回一个三元组 异常类 异常类的实例 跟踪记录对象 例5 41 使用exc info 函数返回异常 try 8 0except importsyst sys exc info print t foriint 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

提交评论