




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章文件和异常处理。本章介绍了Python的文件操作(侧重于文本文件操作)、目录操作和Python的异常处理机制。最后,介绍了如何使用pdb模块调试Python程序。5.1文件的基本操作,5.1.1在打开文件使用之前,必须先打开文件,然后进行读、写、添加等操作。Python使用open函数打开文件,它的语法格式是:open(名称,模式,缓冲,其中文件名(名称)是必需的参数,模式和缓冲参数是可选的。这个函数返回一个文件对象。打开文本文件。上述语句直接打开一个指定的文件,如果该文件不存在,则创建该文件。这里F是一个文件对象,它与指定的文件相关联。许多文档称F为文件描述符。事实上,它可以被视为指定文件的“句柄”,通过它,对指定文件的所有后续操作将被执行,直到使用稍后描述的close()函数关闭指定文件。打开功能模式参数表、模式参数组合及描述、打开功能缓冲参数表、5.1.2关闭文件,使用后应及时关闭。关闭方法用于关闭Python中的文件。一般来说,Python会在文件不被使用后自动关闭它,但是这个功能不能保证,因为Python可能会缓存写入的数据。如果程序由于某种原因崩溃,数据可能不会完全写入文件,从而导致文件失败。示例5-2关闭文本文件。要关闭示例5-1中的F文件对象,可以使用以下语句:f.close(),5.1.3读取文本文件中的数据。读取文本文件中数据的语法格式是:f.read(size)#size是读取的长度,f.readline(size)#以字节为单位读取一行。如果定义了大小,则只能返回一行f.readlines(size)#的一部分,将文件的每一行作为列表的一个成员,并返回该列表。阅读文本文件的内容。假设在C: 用户目录下有一个文本文件test.txt,文本为“HelloWorld!”。5.1.4创建文本文件。在Python中,以追加模式打开文本文件来创建该文件。语法格式是:打开(名称,一个,缓冲)#创建一个空文件示例5-4创建一个文本文件。在当前目录下创建一个文本文件text.txt。您可以使用以下语句:f=打开(Rc: 用户文本。将数据添加到现有文件中。将数据写入文件的函数是write()和writelines()。它的语法格式是:f.write(str)#将str写入文件。Write()不会在字符串后添加新的行字符f.writelines(seq)#来将seq的内容写入文件(多行写一次)。这个函数只被忠实地编写,每行后不会添加任何内容。向文本文件添加数据。假设我们将数据写入D:xunliantest.txt文件,我们可以使用以下语句:其中17个字符表示将17个字符写入文本文件test.txt,5.1.6文件指针。对文件进行操作时,文件内部会有一个文件指针来定位当前位置。控制文件指针的位置可以实现重复读取,使用seek方法可以控制文件指针的位置。它的语法格式是:seek ,why) #移动文件指针的每个参数的含义如下:offset: offset。它通常相对于文件的开头进行计算,并且通常是正数。当:偏移相对位置。Whence可以是0,这意味着计算从零开始,1意味着计算以当前位置为原点,2意味着计算以文件的结尾为原点。偏移相对位置常数是寻道集、寻道曲线、寻道终点。seek _ set:指示文件的起始位置,即0(默认),在这种情况下,偏移量必须是0或正数。Os。SEEK_CUR:指示文件的当前位置,即1,其中偏移量可以为负。Os。SEEK_END:指示文件的结束位置,即2,其中偏移量通常为负。要获取文件指针的位置,可以使用tell方法,其语法格式为:f tell () #返回文件操作标记的当前位置,并以文件的开头为原点示例5-6来获取文件指针的当前位置。在前面的例子中,text.txt文件中的文本是“欢迎来到中国!”,如果第二次读取将输出“”,可以使用seek函数使其从头开始读取:5.1.7截断文件,使用truncate方法截断文件,将文件截断到指定的大小,默认是截断到当前文件操作标记的位置。截断文件的语法格式是:f truncate (size)。如果文件大小大于文件大小,根据系统的不同,文件可能不会被更改,文件可能会被填充为相应的大小0,或者可能会添加一些随机内容。切断文件。在text.txt文件中,还有一行写道:“非常感谢!”,查看截断后是否可以再次输出:5.1.8复制、删除、移动和重命名文件。复制文件使用shutil模块中的方法,包括复制、复制文件和复制树。每种方法在下面分别描述。Shutil.copy(src,dst)#将数据从src复制到dst(src是文件,dst可以是目录)shutil.copyfile(src,dst)#将数据从src复制到dst(src和dst都是文件)shutil.copytree(src,dst)#递归复制文件夹,其中src和dst都是目录,dst不存在。使用操作系统模块中的移除方法移除文件。操作系统.删除(路径)#path是文件的路径名使用shutil模块中的move方法移动文件,shutil .移动(src,dst)#将数据从src移动到dst,src和dst可以是文件或目录。重命名文件或目录使用操作系统模块的重命名方法。os.rename(old,new)#old是原始文件名,new是更改后的文件名。示例5-8使用复制功能复制文件。在复制功能中,如果dst是一个文件夹,src文件被复制到它的文件夹;如果dst是一个文件,src文件将被复制到dst文件中,也就是说,该文件将被复制并重命名。示例5-9使用复制文件功能复制文件。使用复制文件功能的前提是目标文件有写权限,否则会产生错误。我们使用glob(路径名)函数返回所有匹配文件路径的列表,无论是绝对路径还是相对路径。示例5-10使用复制树功能复制文件。示例5-11文件删除。使用remove()函数删除d: 练习目录中的text.txt文件:importos.chdir (rd: 练习)os.remove (text.txt),示例5-12文件移动。使用move方法将文件或文件夹移动到另一个目录,并使用glob函数获取文件路径。示例5-13文件重命名。我们使用以下语句将当前目录下的文件text.txt重命名为text1.txt:OS . rename( text . txt , text 1 . txt ),5.2指定目录下的文件操作,5.2.1获取当前目录。获取Python当前脚本运行目录的方法是getcwd(),其语法格式如下:OS . getcwd()示例5-14获取当前工作区的目录。5.2.2要获取当前目录的内容,并获取当前目录下的所有文件和目录名,请使用os模块下的listdir方法。它的语法格式是:OS . listdir()示例5-15获取指定文件夹下的所有文件和文件夹。如果指定的文件夹不存在,将返回相应的提示信息。importosdelflistdir(dir_path): ifos . path . exists(dir _ path): RETURN OS . list dir(dir _ path)ELse : RETURN目录dir _ path不存在 if _ _ name _ _= _ _ main _ _ : f=list dir(r d : practice )# print(f)f=list dir(r d : Practices )#此目录中没有print(f)。将上面的代码放到一个程序中,运行结果是:5.2.3创建和删除目录。创建单个目录的语法格式是:os.mkdir(file )。删除目录有两种方法,分别调用os模块的rmdir方法和shutil的rmtree方法。区别在于前者只能删除空目录,而后者可以删除空目录和非空目录。操作系统。RMDIR (DIR )只能删除空目录Shutil。RM树(“目录”)#可以删除空目录和非空目录,示例5-16创建一个新目录。mkdir(rd : new dir )示例5-17删除空目录。使用rmtree函数删除目录。IMPORTSHUTILDIR _ PATH=RD : TEST SHUTILE。Rmtree (DIR _ PATH),5.3异常处理,5.3.1异常是发生在程序执行期间并影响正常程序执行的事件。通常,当Python不能正常处理程序时,它会生成异常。Python使用exceptionobject来表示异常。当异常发生时,我们需要捕捉它,否则程序将停止回溯运行。下表显示了Python中的标准异常。5.3.2try,else,finally语句,catch异常可以使用try,exception,else,finally语句。try/except语句用于检测try语句块中的错误,以便except语句捕获异常信息并对其进行处理。如果程序在出现异常时没有停止运行,它只需要在try中捕获它。try/exception/else的语法如下:try:#运行除#以外的其他代码。如果在try节中引发了名称异常,则#如果引发了名称异常,则获得其他数据。如果最终没有发生异常,则:#将执行该语句,而不管try子句中是否出现异常。try语句的工作流程如下:(1)当遇到try语句时,Python会将其标记在当前程序的上下文中。当异常发生时,python可以快速返回到这里,再次执行try子句,然后执行什么取决于运行过程中是否存在异常。(2)如果在执行try之后的语句时出现异常,Python会跳回try并执行与该异常匹配的第一个except子句。处理完异常后,它将继续运行(除非在处理异常时引发新的异常)。(3)如果尝试后语句中出现异常,但没有匹配的异常子句,则该异常将被提交到上一次尝试或程序的顶部(这将结束程序并显示默认错误消息)。(4)如果在执行try子句时没有出现异常,Python将在else语句之后执行该语句(如果有else语句),然后程序遍历整个try语句并继续运行。(5)无论是否出现异常,最终条款都将被执行。使用try/exception关键字捕获异常。尝试:打印(8/0)异常零除错误:打印(除数不能为0)将上述代码放入程序,运行结果是:示例5-37捕获多个异常并以元组形式列出它们。尝试:打印(8/0)异常(零除错误,异常):打印(发生异常)将上述代码放入程序,结果是:示例5-38结合使用try/Exception/else/final子句来处理异常。尝试:打印(8/0)异常(零除错误,异常):打印(发生异常)否则:打印(“正常操作”)最后:打印(“清理”)将上述代码放入程序,运行结果为:5.3.3触发异常和自定义异常。当某些地方出现错误时,可以自动触发异常。下面介绍了如何触发异常以及如何创建自己的异常类型。使用raise关键字在Python中触发异常。def thoerr():引发异常(引发异常)#Exception:引发异常ThorwErr()引发关键字触发一般异常类型。一般来说,异常越详细越好。Python内置了许多异常类型,可以通过dir函数查看。示例5-39使用dir函数查看Python内置模块内置中的异常类型。您可以在Python中自定义特殊类型的异常,只需确保从异常类继承(直接或间接)。示例5-40自定义异常类。5.3.4使用sys模块返回异常。在Python中获取异常信息的另一种方法是通过sys模块中的exc_info()函数,它返回一个三元组(异常类、异常类的实例、跟踪记录对象)。示例5-41使用exc_info()函数返回一个异常。尝试:8/0异常:导入系统=sys.exc _ info()打印(t)输入:打印(I)将上述代码放入一个程序中,运行结果为:5.4使用pdb模块调试程序。在Python中,语法错误可以通过Python解释器找到,但是逻辑错误或变量使用错误不容易找到。如果结果不符合预期,则需要调试。Python自己的pdb模块也是一个很好的调试工具,可以用来设置断点、单步执行、查看变量值等。脚本。【示例】使用dir函数检查pdb模块的内置函数,5.4.1中常用的pdb函数和pdb.run()函数PDB.run()函数主要用于调试语句块。其基本语法如下:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中地理教学中实验教学的创新设计与学生实践能力培养研究
- 中国用电标示牌行业市场前景预测及投资价值评估分析报告
- 中国声敏传感器市场供需现状及投资战略研究报告
- 2025-2030年中国钢锭项目投资可行性研究分析报告
- 电气件行业深度研究分析报告(2024-2030版)
- 农用塑料制品生项目投资可行性研究分析报告(2024-2030版)
- 周大福培训课件
- 2025年中国制造执行系统(MES)行业市场深度调查评估及投资方向研究报告
- 中国供应链金融科技解决方案行业发展前景预测及投资规划建议报告
- 轴承培训课件
- 2025至2030中国控制按钮开关行业产业运行态势及投资规划深度研究报告
- 临商银行股份有限公司招聘笔试真题2024
- 2025广东高考物理试题(大题部分)+评析
- DB31-T 1593-2025 基于自动驾驶功能的公交运营技术要求
- 2025年广西文化和旅游厅所属事业单位招聘考试备考题库
- 2024届清华大学强基计划数学学科笔试试题(附答案)
- GB/T 9126.1-2023管法兰用非金属平垫片第1部分:PN系列
- Q∕SY 05262-2019 机械清管器技术条件
- 二级建造师法规课件
- 早产儿出院后喂养(课堂PPT)
- 英语的起源与发展(课堂PPT)
评论
0/150
提交评论