资源简介 (共67张PPT)单元7文件操作与异常处理Python程序设计知识入门知识要点1.Windows 操作系统中的路径 2.语法错误 3.异常1.Windows 操作系统中的路径(1)当前工作文件夹当前工作文件夹是指当前运行文件或打开的文件所在的文件夹,在Python 中,通过os模块提供的getcwd() 方法获取当前工作文件夹。在“D:\PycharmProject\Test07\test7-1.py”文件中,编写以下代码。import osprint(os.getcwd()) # 输出当前工作文件夹运行结果如下。D:\PycharmProject\Test07显示的文件夹为当前工作文件夹。1.Windows 操作系统中的路径(2)相对路径所谓相对路径是指相对于当前工作文件夹的路径,如果访问的文件位于当前工作文件夹中,则使用该文件名称即可,如果访问的文件位于当前工作文件夹的下级子文件夹中,则相对路径的起始文件夹为当前工作文件夹的第1 级子文件夹。例如,在当前工作文件夹“D:\PycharmProject\Test07”中,有一个名称为message.txt”的文本文件,在打开这个文本文件时,直接写文件名称“message.txt”即可,该文本文件的实际路径就是当前工作文件夹“D:\PycharmProject\Test07”+ 相对路径message.txt”,即完整路径为“D:\PycharmProject\Test07\message.txt”。如果文本文件“message.txt”位于当前工作文件夹的第1 级子文件夹“demo”中,那么相对路径为“demo\message.txt”。1.Windows 操作系统中的路径在Python 中,打开文本文件“message.txt”有如下几种方式。① "demo\\message.txt" 的形式。在Python 中指定路径时,需要对路径分隔符“\”进行转义,即将路径中的“\”替换为“\\”,例如相对路径“demo\message.txt”需要使用“demo\\message.txt”代替。示例如下。>>>file=open("demo\\message.txt")>>>file.close()② "demo/message.txt" 的形式。③ r"demo\message.txt" 的形式。在Python 中,指定路径时可以在路径字符串前面加上字母“r”或“R”,使路径字符串原样输出,这时路径中的分隔符“\”就不需要再转义了。示例如下。>>>file=open(r"demo\message.txt")>>>file.close()在Python 中,指定路径时允许将路径分隔符“\”用“/”代替。示例如下。>>>file=open("demo/message.txt")>>>file.close()1.Windows 操作系统中的路径(3)绝对路径绝对路径是指在使用文件时指定文件的完整路径,它不依赖于当前工作文件夹。在Python 中,可以通过os.path 模块提供的abspath() 方法获取一个文件的绝对路径。abspath() 方法的基本语法格式如下。os.path.abspath(strPath)其中,strPath 表示要获取绝对路径的相对路径,可以是文件,也可以是文件夹。例如,要获取相对路径“demo\message.txt”的绝对路径,可以使用下面的代码实现。>>>import os>>>print(os.path.abspath(r"demo\message.txt")) # 获取绝对路径D:\PycharmProject\Test07\demo\message.txt运行结果如下。1.Windows 操作系统中的路径(4)拼接路径如果想要将两个或者多个路径拼接到一起组成一个新的路径,可以使用os.path 模块提供的join() 方法实现,这样可以正确处理不同操作系统的路径分隔符。join() 方法的基本语法格式如下。os.path.join(path1 [,path2 [,…]] )其中,path1、path2 表示待拼接的文件路径,这些路径之间使用半角逗号“,”进行分隔。例如,将路径“D:\PycharmProject\Test07”和路径“demo\message.txt”拼接在一起,可以使用下面的代码实现。>>>import os>>>print(os.path.join("D:\PycharmProject\Test07","demo\message.txt"))D:\PycharmProject\Test07\demo\message.txt运行结果如下。2.语法错误Python 的语法错误是初学者经常碰到的,示例如下。>>>if score<60print(' 成绩不及格')该if 语句运行时会出现以下错误信息。File "", line 1print(' 成绩不及格')^IndentationError: unexpected indent出现错误的原因是:函数print() 前面缺少了一个冒号“:”。语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。3.异常异常 说明AttributeError 试图访问一个未知的对象属性引发的异常IOError 输入/输出异常,例如打开的文件不存在引发的异常ImportError 无法引入模块或包引发的异常,其原因通常是路径问题或名称错误IndentationError 缩进错误,导致代码没有正确对齐IndexError 索引值超出序列边界引发的异常,例如当列表x只有3个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键引发的异常MemoryError 内存不足引发的异常NameError 尝试使用一个没有声明的变量引发的异常TypeError 传入对象类型与要求的不符合引发的异常UnboundLocalError 试图访问一个还未被声明的局部变量,可能是由于另有一个同名的全局变量,导致以为正在访问它ValueError 传入一个错误的值,即使值的类型是正确的ZeroDivisionError 除数为0引发的异常循序渐进知识要点7.1 打开与关闭文件 7.1.1 使用open()方法打开文件 7.1.2 使用close()方法关闭文件 7.1.3 打开文件时使用with语句 7.2 读取与写入文件内容 7.2.1 文件对象 7.2.2 调整文件的当前位置 7.2.3 读取文件 7.2.4 向文件中写入内容 【任务7-1】打开并读取文件的全部行性 【任务7-2】以二进制形式打开文件并读取其内容 7.3 创建与操作文件、文件夹 7.3.1 创建文件夹7.3.2 针对文件夹的操作7.3.3 创建文件7.3.4 针对文件的操作7.4 删除文件及文件夹7.4.1 删除文件7.4.2 删除文件夹7.5 异常处理语句7.5.1 try…except语句7.5.2 try…except…else语句7.5.3 try…except…finally语句7.5.4 使用raise语句抛出异常.7.1.1 使用open() 方法打开文件Python 的open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理的过程中都需要使用这个方法,如果文件无法打开,会抛出OSError 异常。【注意】使用open() 方法时一定要保证文件对象处于关闭状态,可调用close() 方法将文件关闭。open() 方法会返回一个file 对象,open() 方法通常接收两个参数:文件名和模式。调用该方法的基本语法格式如下。file=open(filename[, mode[, buffering [, encoding=None]]])7.1.1 使用open() 方法打开文件参数说明如下。file :表示要创建的文件对象。filename :用于指定包含待打开或创建文件的路径(相对路径或绝对路径)与文件名称字符串,需要使用单引号或双引号引起来。mode :可选参数,用于指定打开文件的模式,即描述文件如何使用,如只读、写入、追加等。buffering :可选参数,用于指定读写文件的缓存模式,取值为0 表示不缓存;取值为1 表示缓存;如果取值大于1,则表示缓冲区的大小;默认为缓存模式。encoding :可选参数,用于指定文件的编码方式,默认使用GBK 编码。7.1.1 使用open() 方法打开文件open() 方法用于打开一个文件时,指定打开文件的模式的常见状态如表所示。模式 r r+ w w+ a a+读 √ √ √ √写 √ √ √ √ √创建 √ √ √ √覆盖 √ √ 指针在开始 √ √ √ √ 指针在结尾 √ √7.1.1 使用open() 方法打开文件(1)以默认方式打开一个文本文件>>>file=open(' 如何注册京东账号.txt')以上的open() 方法中只指定了文本文件名称,默认文件打开模式为文本文件模式(t),默认文件访问模式为只读(r),默认为缓存模式,默认文件编码为GBK 编码。(2)以二进制形式打开非文本文件使用oprn() 方法可以以二进制形式打开图片文件、音频文件、视频文件等非文本文件。>>>file=open('hh.jpg','rb')加上“b”表示以二进制模式打开非文本文件。(3)打开文件时指定编码方式。打开文件时添加“encoding='utf-8'”参数,可指定编码方式为“utf-8”。>>>file=open(' 如何注册京东账号.txt','r',encoding='utf-8')7.1.2 使用close() 方法关闭文件在Python 中,使用open() 方法打开文件后,需要及时关闭文件,避免对文件造成不必要的破坏。可以使用文件对象的close() 方法关闭打开的文件。close() 方法的基本语法格式如下。file.close()其中,file 为打开的文件对象。调用close() 方法时,先刷新缓冲区中还没有写入的内容,然后再关闭文件,这样可以将没有写入文件的内容写入文件中,在关闭文件后,便不能再进行写入操作了。7.1.2 使用close() 方法关闭文件当处理完一个文件后,调用close() 方法来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。>>>file=open(' 如何注册京东账号.txt', 'r')>>>file.close()>>>file.read()Traceback (most recent call last):File "", line 1, in ValueError: I/O operation on closed file.示例如下异常信息7.1.3 打开文件时使用with 语句使用open() 方法打开文件时应用with 语句的基本语法格式如下。with open(filename[, mode[, buffering [, encoding=None]]]) as file:< 语句体>其中,file 为文件对象,用于保存打开文件的结果;语句体是执行with 语句后相关的一些操作语句。如果暂不指定任何语句,可以使用pass 语句代替。当处理一个文件对象时,使用with 语句是非常好的方式。在结束后,它会自动正确关闭文件,而且写起来也比try…finally 语句块要简短。示例如下>>>with open(' 如何注册京东账号.txt','r',encoding='utf-8') as file:pass>>>file.closed运行结果True7.1.3 打开文件时使用with 语句【实例7-1】演示使用open() 方法打开文件、使用close() 关闭文件、使用with 语句打开文件后自动关闭文件实例7-1 的代码如下所示。file=open(' 如何注册京东账号.txt')file.close()with open(' 如何注册京东账号.txt','r',encoding='utf-8') as file:pass循序渐进知识要点7.1 打开与关闭文件 7.1.1 使用open()方法打开文件 7.1.2 使用close()方法关闭文件 7.1.3 打开文件时使用with语句 7.2 读取与写入文件内容 7.2.1 文件对象 7.2.2 调整文件的当前位置 7.2.3 读取文件 7.2.4 向文件中写入内容 【任务7-1】打开并读取文件的全部行性 【任务7-2】以二进制形式打开文件并读取其内容 7.3 创建与操作文件、文件夹 7.3.1 创建文件夹7.3.2 针对文件夹的操作7.3.3 创建文件7.3.4 针对文件的操作7.4 删除文件及文件夹7.4.1 删除文件7.4.2 删除文件夹7.5 异常处理语句7.5.1 try…except语句7.5.2 try…except…else语句7.5.3 try…except…finally语句7.5.4 使用raise语句抛出异常.7.2.1 文件对象使用open() 方法打开文件,并创建文件对象的语法格式如下。file=open(filename[, mode[, buffering [, encoding=None]]])7.2.2 调整文件的当前位置Python 提供了seek() 方法用于将文件的指针移动到指定位置。seek() 方法的基本语法格式如下。file.seek(offset [, whence ] )file :表示已经打开的文件对象。whence :用于指定从什么位置开始计算移动的字符个数,值为0 表示从文件的开始位置开始计算,值为1 表示从当前位置开始计算,值为2 表示从文件末尾开始计算,默认值为0。offset: 用于指定移动的字符个数。7.2.2 调整文件的当前位置使用seek() 方法时,offset 的值是按一个汉字占两个或3 个字节(GBK 编码中一个汉字占两个字节,UTF-8 编码中一个汉字占3 个字节),一个英文字母和半角数字占一个字节计算的。这与read(size) 方法按字符数量计算不同。在打开文本文件时(即打开文件时没有使用b 模式),只允许从文件开始位置开始计算相对位置(即只会相对于文件起始位置进行定位),如果从文件末尾开始计算就会抛出异常。以二进制模式(b)打开文件时,使用文件对象的seek() 方法改变文件的当前位置有多种方法。seek(n,0) :表示从起始位置即文件首行的首字符开始移动n 个字符。seek(n,1) :表示从当前位置往后移动n 个字符。seek(-n,2) :表示从文件的结尾往前移动n 个字符。示例如下7.2.3 读取文件1.使用readline() 方法读取一行在Python 中, 文件对象file 提供了readline() 方法用于每次逐行读取文件内容。readline() 方法的基本语法格式如下。file.readline()其中file 为打开的文件对象,打开文件时,需要指定文件打开模式为r(只读模式)或者r+(读写模式)。7.2.3 读取文件【实例7-2】演示打开文本文件“如何注册京东账号.txt”后,读取第一行内容并输出文本文件“如何注册京东账号.txt”的初始内容如下。01OPTION打开京东首页,在右上方单击【免费注册】按钮。02OPTION进入注册页面,请填写您的邮箱、手机等信息完成注册。03OPTION注册成功后,请完成账户安全验证,提高您的账户安全等级。with open(' 如何注册京东账号.txt','r') as file:line = file.readline()print(line,end= "\n") # 输出一行内容实例7-2 的代码如下如何注册京东账号?运行结果7.2.3 读取文件2.使用readlines() 方法读取全部行在Python 中,文件对象file 提供了readlines() 方法用于每次读取文件的全部行。readlines()方法的基本语法格式如下。file.readlines()其中,file 为打开的文件对象,打开文件时,需要指定文件打开模式为r(只读模式)或者r+(读写模式)。使用readlines() 方法读取文件的全部行时,返回的是一个字符串列表,每个元素为文件的一行内容。7.2.3 读取文件【实例7-3】演示打开文本文件后,读取全部行的内容并输出实例7-3 的代码如下with open(' 如何注册京东账号.txt','r') as file:lines = file.readlines()print(lines) # 输出全部行的内容实例7-3 的运行结果如下[' 如何注册京东账号? \n', ' 若您还没有京东账号, 请单击注册, 详细操作步骤如下。\n', '(1)打开京东首页,在右上方单击【免费注册】按钮;\n', '(2)进入注册页面,请填写您的邮箱、手机等信息完成注册。\n', '(3)注册成功后,请完成账户安全验证,提高您的账户安全等级。\n']7.2.3 读取文件3.使用read() 方法读取指定个数的字符在Python 中,文件对象提供了read() 方法用于读取指定个数的字符,其基本语法格式如下。file.read( [size] )其中,file 为打开的文件对象;size 为可选参数,用于指定要读取的字符个数,如果省略则一次性读取所有内容。打开文件时,需要指定文件打开模式为r(只读模式)或者r+(读写模式),否则会抛出异常。【注意】使用size 指定字符的个数时,一个汉字、一个英文字母、一个半角数字的字符个数都相同,为1。7.2.3 读取文件3.使用read() 方法读取指定个数的字符(1)读取打开文件的全部内容【实例7-4】演示打开文本文件后,读取文件的全部内容并输出实例7-4 的代码如下with open(' 如何注册京东账号.txt','r') as file:content = file.read()print(content) # 输出全部内容实例7-4 的运行结果如下如何注册京东账号?① 打开京东首页,在右上方单击【免费注册】按钮。② 进入注册页面,请填写您的邮箱、手机等信息完成注册。③ 注册成功后,请完成账户安全验证,提高您的账户安全等级。若您还没有京东账号,请单击注册,详细操作步骤如下。7.2.3 读取文件3.使用read() 方法读取指定个数的字符(2)从文件的开始位置读取指定数量的字符【实例7-5】演示打开文本文件“如何注册京东账号.txt”后,读取该文件的前9 个字符并输出实例7-5 的代码如下with open(' 如何注册京东账号.txt','r') as file:content = file.read(9)print(content)实例7-5 的运行结果如下如何注册京东账号?7.2.3 读取文件3.使用read() 方法读取指定个数的字符(3)从文件的指定位置开始读取指定数量的字符使用read([size]) 方法读取文件时,默认从文件的开始位置读取。如果想要读取中间的部分内容,可以先使用文件对象的seek() 方法将文件的指针移动到指定位置,然后再使用read([size]) 方法读取指定数量的字符。7.2.3 读取文件【实例7-6】演示seek()、tell() 和read() 方法的联合使用实例7-6 的代码如下实例7-6的代码如下从运行结果可以看出,调用open() 方法打开文件时,当前位置为0,调用read(9) 方法,读取并输出第1 行的9 个字符(18 字节),当前位置为18;然后将文件指针从文件头的(相对起始位置)开始位置向后移动20 个字符(40 字节),当前位置为40;再读取并输出5 个字符(10 字节),当前位置为50。7.2.4 向文件中写入内容Python 的文件对象提供了write() 方法,可以用于向文件中写入内容。write() 方法的基本语法格式如下。file.write(string)其中,file 为使用open() 方法打开的文件对象;string 表示待写入的字符串类型的内容。打开文件时,需要指定文件打开模式为w(可写模式)或者a(追加模式),否则会抛出异常。f.write(string) 将string 写入文件中,然后返回写入的字符数。如果要写入的内容不是字符串类型,那么需要先进行转换,例如数值可以使用str() 函数转换为字符串。7.2.4 向文件中写入内容【实例7-7】演示使用open() 创建文件,使用write() 方法向文件中写入内容,然后读取并输出文件内容实例7-7 的代码如下实例7-7 的运行结果如下content='Bright sunshine, full of vitality and all things renewed'file= open("expectation.txt", "w") # 打开一个文件num = file.write(content) # 写入内容print(num)file.close() # 关闭打开的文件file= open("expectation.txt", "r") # 打开一个文件text=file.read()print(text)56Bright sunshine, full of vitality and all things renewed7.2.4 向文件中写入内容下面针对文本文件“expectation.txt”应用seek() 方法改变当前位置,并观察当前位置的变化。示例如下>>>file = open('expectation.txt', 'rb+')>>>file.seek(5) # 当前位置为文件的第6 字节5>>>file.read(1).decode()'t'>>file.seek(-3, 2) # 当前位置为文件的倒数第3 字节53>>>file.read(1).decode()'w'>>>file.close()打开并读取文件的全部行【任务7-1】【任务描述】(1)在PyCharm 中创建项目“Unit07”。(2)在项目“Unit07”中创建Python 程序文件“t7-1.py”。(3)以“只读”方式打开当前工作文件夹中的文本文件“如何注册京东账号.txt”,然后读取并输出该文件的全部行。【任务7-1】01【任务实施】02成功启动PyCharm 后,在指定位置“D:\PycharmProject\”,创建PyCharm 项目“Unit07”。在PyCharm 项目“Unit07”中,新建Python 程序文件“t7-1.py”,PyCharm 窗口中显示程序文件“t7-1.py”的代码编辑区域,在该程序文件的代码编辑区域中自动添加了模板内容。03在文件“t7-1.py”的代码编辑区域中的已有模板注释内容下面输入代码,程序文件“t7-1.py”的代码如下所示。【任务7-1】04【任务实施】在PyCharm 窗口中选择【运行】菜单,在弹出的下拉菜单中选择【运行】命令。在弹出的【运行】对话框中选择【t7-1】选项,程序文件“t7-1.py”开始运行。程序文件“t7-1.py”的运行结果如下所示。如何注册京东账号?若您还没有京东账号,请单击注册,详细操作步骤如下。(1)打开京东首页,在右上方单击【免费注册】按钮。(2)进入注册页面,请填写您的邮箱、手机等信息完成注册。(3)注册成功后,请完成账户安全验证,提高您的账户安全等级。以二进制形式打开文件并读取其内容【任务7-2】【任务描述】(1)在项目“Unit07”中创建Python 程序文件“t7-2.py”。(2)自定义函数readFile(),使用该函数以二进制只读模式“rb”打开文本文件“expectation.txt”,读取该文件的内容,并使用函数decode() 将bytes 对象转换为文字字符串。(3)调用自定义函数readFile(),并以文字形式输出文件“expectation.txt”的内容。【任务7-2】01【任务实施】02在PyCharm 项目“Unit07”中创建Python 程序文件“t7-2.py”。在程序文件“t7-2.py”中编写代码,实现所需功能,程序文件“t7-2.py”的代码如下所示。运行程序文件“t7-2.py” 。循序渐进知识要点7.1 打开与关闭文件 7.1.1 使用open()方法打开文件 7.1.2 使用close()方法关闭文件 7.1.3 打开文件时使用with语句 7.2 读取与写入文件内容 7.2.1 文件对象 7.2.2 调整文件的当前位置 7.2.3 读取文件 7.2.4 向文件中写入内容 【任务7-1】打开并读取文件的全部行性 【任务7-2】以二进制形式打开文件并读取其内容 7.3 创建与操作文件、文件夹 7.3.1 创建文件夹7.3.2 针对文件夹的操作7.3.3 创建文件7.3.4 针对文件的操作7.4 删除文件及文件夹7.4.1 删除文件7.4.2 删除文件夹7.5 异常处理语句7.5.1 try…except语句7.5.2 try…except…else语句7.5.3 try…except…finally语句7.5.4 使用raise语句抛出异常.7.3.1 创建文件夹创建一级文件夹是指一次只创建一个文件夹,在Python 中,可以使用os 模块提供的mkdir() 方法实现。通过该方法可创建指定路径中的最后一级文件夹,如果该文件所在的上一级文件夹不存在,则会抛出FileNotFoundError 异常。mkdir() 方法的基本语法格式如下。os.mkdir( path )其中,path 用于指定要创建的文件夹,可以使用相对路径,也可以使用绝对路径。例如,在Windows 操作系统中创建一个文件夹“D:\PycharmProject\Test07\test”,可以使用以下代码。>>>import os>>>os.mkdir(r"D:\PycharmProject\Test07\test")1.创建一级文件夹运行以上代码后,将在文件夹“D:\PycharmProject\Test07”中创建一个新的子文件夹“test” 。7.3.1 创建文件夹如果在创建文件夹时,文件夹“test”已经存在了,将抛出FileExistsError 异常,将上面的代码再运行一次,将出现以下异常信息。Traceback (most recent call last):File "", line 1, in FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。'D:\\PycharmProject\\Test07\\test'如果创建的文件夹有多级父文件夹,待创建文件夹的父文件夹不存在,则会抛出FileNotFoundError 异常。1.创建一级文件夹示例如下>>>import os>>>os.mkdir(r"D:\PycharmProject\Test08\test")异常信息Traceback (most recent call last):File "", line 1, in 7.3.1 创建文件夹FileNotFoundError: [WinError 3] 系统找不到指定的路径。'D:\\PycharmProject\\Test08\\test'创建文件夹时,为了保证不出现重复创建文件夹的问题,可以在创建文件夹前,使用exists() 方法判断指定的文件夹是否存在,根据判断结果再做出合理的操作。>>>import os>>>if not os.path.exists((r"D:\PycharmProject\Test07\test")):os.mkdir(r"D:\PycharmProject\Test07\test")运行上面的代码,如果子文件夹“test”已经存在,if 语句的条件表达式值为False,则不再执行创建子文件夹“test”的语句,也不会抛出FileExistsError 异常。1.创建一级文件夹示例如下7.3.1 创建文件夹2.创建多级文件夹使用mkdir() 方法一次只能创建一级文件夹,如果需要一次创建多级文件夹,可以使用os 模块提供的makedirs() 方法,该方法会采用递归的方式逐级创建指定的多级文件夹。makedirs() 方法的基本语法格式如下。os. makedirs(name)其中,name 用于指定要创建的多级文件夹,可以使用相对路径,也可以使用绝对路径。例如,在Windows 操作系统中,需要在文件夹“D:\PycharmProject\Test07”中创建子文件夹“01”,再在子文件夹“01”中创建下级子文件夹“0101”,可以通过以下代码实现。>>>import os>>>os.makedirs(r"D:\PycharmProject\Test07\01\0101")运行上面的代码后,将创建右图所示的两级子文件夹。7.3.2 针对文件夹的操作1.判断文件夹是否存在在Python 中,判断文件夹是否存在,可以使用os.path 模块提供的exists() 方法实现。exists()的基本语法格式如下。os.path.exists(path)其中,path 表示待判断的文件夹,可以使用相对路径,也可以使用绝对路径。如果指定路径中的文件夹存在,则返回True,否则返回False。例如,要判断绝对路径“D:\PycharmProject\Test07”是否存在,可以使用以下代码。>>>import os>>>print(os.path.exists(r"D:\PycharmProject\Test07"))运行上面两行代码,如果文件夹“Test07”存在,则返回True,否则返回False。7.3.2 针对文件夹的操作2.遍历文件夹遍历是指将指定文件夹中的全部子文件夹及文件浏览一遍。在Python 中,os 模块的walk() 方法可以实现遍历文件夹的功能。walk() 方法的基本语法格式如下。os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])top 用于指定要遍历的根文件夹。onerror 为可选参数,用于指定错误处理方式,默认为忽略,如果不想忽略可以指定一个错误处理函数。topdown 为可选参数,用于指定遍历的顺序,其默认值为True。followlinks 为可选参数,默认情况下,walk() 方法不会向下转换成解析到文件夹的符号链接,将该参数设置为True,表示在支持的操作系统上访问由符号链接指向的文件夹。7.3.2 针对文件夹的操作【实例7-8】演示使用walk() 方法遍历文件夹“D:\PycharmProject\Test07”实例6-4 的代码如下所示。import ostuple=os.walk(r"D:\PycharmProject\Test07")for item in tuple:print(item)如果文件夹“D:\PycharmProject\Test07”中包括如图所示的子文件夹和文件,运行上面的的代码,将显示如下结果。('D:\\PycharmProject\\Test07', ['demo', 'test'],['message.txt', 'test7-1.py'])('D:\\PycharmProject\\Test07\\demo', [], ['message.txt'])('D:\\PycharmProject\\Test07\\test', [], [])7.3.2 针对文件夹的操作3.重命名文件夹os 模块提供了重命名文件夹的方法rename(),该方法的基本语法格式如下。os.rename(src , dst )其中,src 用于指定要进行重命名的文件夹;dst 用于指定重命名后的文件夹。进行文件夹重命名操作时,如果指定的文件夹不存在,将会抛出FileNotFoundError 异常,所以在进行文件夹重命名时,先使用os.path.exists() 方法判断文件夹是否存在,只有存在时才可以进行重命名操作。例如,要将当前工作文件夹中的子文件夹名称“demo”修改为“demo07”,可以使用下面的代码。>>>import os>>>os.rename("demo","demo07")运行上面的代码,如果当前工作文件夹中的子文件夹“demo”存在,则会完成子文件夹的重命名操作,否则将抛出异常。使用rename() 方法,只能修改路径中最后一级的子文件夹名称。7.3.3 创建文件调用open() 方法时,若指定mode 参数值为w、w+、a 或a+,当要打开的文件不存在时,就会创建一个新文件。例如,以下代码用于在当前工作文件夹中创建一个名称为“expectation.txt”的文本文件。>>>file=open('expectation.txt','w')>>>file.close()7.3.4 针对文件的操作1.判断文件是否存在在Python 中,判断文件是否存在,也可以使用os.path 模块提供的exists() 方法实现。exists() 的基本语法格式如下。os.path.exists(path)其中,path 表示待判断的文件,path 中包含路径,可以是相对路径,也可以是绝对路径。如果指定路径中的文件存在,则返回True,否则返回False。例如,要判断指定的文件“D:\PycharmProject\Test07\message.txt”是否存在,可以使用以下代码。>>>import os>>>print(os.path.exists(r"D:\PycharmProject\Test07\message.txt "))运行上面两行代码,如果指定文件夹“Test07”中的文件“message.txt”存在,则返回True,否则返回False。7.3.4 针对文件的操作2.获取文件的基本信息在计算机中创建文件后,文件本身就包含一些有用的信息,例如文件大小、文件的最后一次访问时间、文件的最后一次修改时间,通过os 模块的stat() 方法可以获取文件的这些信息。stat() 方法的基本语法格式如下。os.stat(path)其中,path 为要获取文件信息的文件路径,可以是相对路径,也可以是绝对路径。获取文本文件“message.txt”的大小的示例代码>>>import os>>>fileInfo=os.stat("message.txt")>>>print(" 文件大小:",fileInfo.st_size," 字节" )运行结果文件大小:26 字节7.3.4 针对文件的操作3.重命名文件os 模块提供了重命名文件的方法rename(),该方法的基本语法格式如下。os.rename(src , dst )其中,src 用于指定要进行重命名的文件;dst 用于指定重命名后的文件。示例代码>>>import os>>>os.rename(r"D:\PycharmProject\Test07\message.txt",r"D:\PycharmProject\Test07\message07.txt")例如,要将当前工作文件夹中的文件名称“message.txt”修改为“message07.txt”,运行上面的代码,如果文件夹“D:\PycharmProject\Test07”中存在文件“message.txt”,则会完成文件“message.txt”的重命名操作,否则将抛出异常。循序渐进知识要点7.1 打开与关闭文件 7.1.1 使用open()方法打开文件 7.1.2 使用close()方法关闭文件 7.1.3 打开文件时使用with语句 7.2 读取与写入文件内容 7.2.1 文件对象 7.2.2 调整文件的当前位置 7.2.3 读取文件 7.2.4 向文件中写入内容 【任务7-1】打开并读取文件的全部行性 【任务7-2】以二进制形式打开文件并读取其内容 7.3 创建与操作文件、文件夹 7.3.1 创建文件夹7.3.2 针对文件夹的操作7.3.3 创建文件7.3.4 针对文件的操作7.4 删除文件及文件夹7.4.1 删除文件7.4.2 删除文件夹7.5 异常处理语句7.5.1 try…except语句7.5.2 try…except…else语句7.5.3 try…except…finally语句7.5.4 使用raise语句抛出异常.7.4.1 删除文件Python 中内置的os 模块中提供了删除文件的方法remove(),该方法基本的语法格式如下。os.remove( path )其中,path 为待删除文件所在的路径,可以使用相对路径,也可以使用绝对路径。例如,要删除指定文件夹中的文件“message.txt”,可以使用下面的代码。>>>import os>>>os.remove(r"D:\PycharmProject\Test07\message.txt ")运行上面的代码后,如果文件夹“D:\PycharmProject\Test07”中存在文本文件“message. txt”,则可以将其删除,否则会出现“FileNotFoundError: [WinError 2] 系统找不到指定的文件。”异常信息Traceback (most recent call last):File "", line 1, in FileNotFoundError: [WinError 2] 系统找不到指定的文件。'D:\\PycharmProject\\Test07\\message.txt '为了解决删除不存在的文件时出现异常的问题,可以在删除文件时,先使用os.path.exists() 方法判断待删除文件是否存在,只有存在才可执行删除操作。7.4.2 删除文件夹1.删除空文件夹删除空文件夹可以使用os 模块提供的rmdir() 方法实现,通过rmdir() 方法删除文件夹时,只有待删除的文件夹为空才能执行删除操作。rmdir() 方法的基本语法格式如下。os.rmdir( path )其中,path 为要删除的文件夹,可以使用相对路径,也可以使用绝对路径。例如,删除前面创建的文件夹“0101”,可以使用下面的代码。>>>import os>>>os.rmdir(r"D:\PycharmProject\Test07\01\0101")运行上面的代码后,“D:\PycharmProject\Test07\01”文件夹中的子文件夹“0101”会被删除。如果待删除的文件夹不存在,将抛出“FileNotFoundError: [WinError 2] 系统找不到指定的文件。”的异常。7.4.2 删除文件夹2.删除非空文件夹使用rmdir() 方法只能删除空文件夹,如果想要删除非空文件夹,可以使用Python 内置标准模块shutil 的rmtree() 实现。例如,在文件夹“01”中有一个子文件夹“0101”和一个文本文件“message.txt”,如果需要删除非空文件夹“01”,可以使用下面的代码。>>>import shutil>>>shutil.rmtree(r"D:\PycharmProject\Test07\01")运行上面的代码,则会直接将文件夹“01”中的子文件夹“0101”和文本文件“message.txt”都删除。循序渐进知识要点7.1 打开与关闭文件 7.1.1 使用open()方法打开文件 7.1.2 使用close()方法关闭文件 7.1.3 打开文件时使用with语句 7.2 读取与写入文件内容 7.2.1 文件对象 7.2.2 调整文件的当前位置 7.2.3 读取文件 7.2.4 向文件中写入内容 【任务7-1】打开并读取文件的全部行性 【任务7-2】以二进制形式打开文件并读取其内容 7.3 创建与操作文件、文件夹 7.3.1 创建文件夹7.3.2 针对文件夹的操作7.3.3 创建文件7.3.4 针对文件的操作7.4 删除文件及文件夹7.4.1 删除文件7.4.2 删除文件夹7.5 异常处理语句7.5.1 try…except语句7.5.2 try…except…else语句7.5.3 try…except…finally语句7.5.4 使用raise语句抛出异常.7.5.1 try…except 语句其结构与执行流程示意图如图所示。在使用try…except 语句捕获异常时,如果在except 后面不指定异常名称,则表示捕获全部异常。示例代码try:num = eval(input(" 请输入数字:"))print(num**2)except:print(" 所输入的不是数字")【实例7-9】演示try…except 语句的应用7.5.1 try…except 语句实例7-10 的代码如下while True:try:num = int(input(" 请输入一个数字:"))print(" 所输入的数字为:",num)except ValueError:print(" 所输入的不是数字,请再次尝试输入! ")【实例7-10】演示使用try…except 语句限制用户输入一个数字执行try 子句(在关键字try 和关键字except 之间的语句)。如果没有异常发生,忽略except 子句,try 子句执行后结束。如果在执行try 子句的过程中发生了异常,那么try 子句余下的部分将被忽略。如果异常的类型和except 关键字之后的名称相符,那么对应的except 子句将被执行。处理程序将只针对对应的try 子句中的异常进行处理。实例7-10 的代码运行7.5.1 try…except 语句实例7-11 的代码如下【实例7-11】演示使用一个try 语句包含多个except 子句分别处理不同异常的情形实例7-11 代码的运行结果如何注册京东账号?无法将数据转换为整数。实例7-11 中的一个try 语句包含多个except 子句,分别用来处理不同的特定异常,但最多只有一个except 子句会被执行。最后一个except 子句可以忽略异常的名称,它将被当作通配符使用,可以使用这种方法输出错误信息。如果一个异常没有与任何except 子句匹配,那么这个异常将会传递给上层的try…except语句。另外,一个except 子句可以同时处理多个异常,这些异常将被放在一个小括号里组成一个元组,示例如下。except(RuntimeError, TypeError, NameError):pass7.5.2 try…except…else 语句在Python 中,try…except 语句还有一个可选的else 子句,用于指定当try 子句没有发现异常时要执行的语句块。如果使用else 子句,那么必须将它放在所有的except 子句之后。else 子句将在try 子句没有发生任何异常的时候执行,如果try 子句出现异常,则else 子句不被执行。其结构与执行流程示意图如图 所示。7.5.2 try…except…else 语句实例7-12 的代码如下arg=" 如何注册京东账号.txt"try:file = open(arg, "r")except IOError:print("cannot open", arg)else:print(" 文件“",arg, "”中的内容共有", len(file.readlines()), " 行")file.close()【实例7-12】演示try…except…else 语句的用法实例7-12 代码的运行结果如下文件“如何注册京东账号.txt ”中的内容共有 5 行7.5.3 try…except…finally 语句完整的异常处理语句包括finally 子句,通常情况下,无论程序是否发生异常,finally 子句都将执行。其结构与执行流程示意图如图7-6 所示。try…except…finally 语句比try…except 语句多了一个finally子句,如果程序中有一些在任何情形下都必须执行的代码,那么就可以将它们放在finally 子句中。无论是否引发了异常,finally 子句都会执行,如果分配了有限的资源,则应将释放这些资源的代码放置在finally 子句中。7.5.2 try…except…else 语句实例 7-13 的代码如下【实例7-13】演示try…except…finally 语句的用法如何注册京东账号?拟打开的文件的名称为:如何注册京东账号.txt运行结果7.5.4 使用raise 语句抛出异常在Python 中,如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise 语句在函数或方法中抛出一个指定的异常。raise 语句的基本语法格式如下。raise [ExceptionName [, (reason)]]其中,ExceptionName 为可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。如果省略此参数,就会把当前的错误原样抛出。参数reason 也可以省略,如果省略,则在抛出异常时,不附带任何描述信息。使用raise 语句触发异常的示意图如图所示。7.5.4 使用raise 语句抛出异常以下代码中,如果x 大于5 就触发异常。x = 10if x > 5:raise Exception("x 不能大于5。x 的值为:{}".format(x))运行以上代码会触发以下异常。Traceback (most recent call last):File "", line 2, in Exception: x 不能大于5。x 的值为:10raise 语句唯一的参数用于指定要被抛出的异常,它必须是一个异常的实例或者异常的类(也就是Exception 的子类)。如果只想知道是否抛出了一个异常,并不想处理它,那么使用一个简单的raise 语句就可以再次把它抛出。THANKS 展开更多...... 收起↑ 资源预览