Python高级编程 课件 第6讲 文件操作与异常处理_第1页
Python高级编程 课件 第6讲 文件操作与异常处理_第2页
Python高级编程 课件 第6讲 文件操作与异常处理_第3页
Python高级编程 课件 第6讲 文件操作与异常处理_第4页
Python高级编程 课件 第6讲 文件操作与异常处理_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第6讲文件操作与异常处理深圳北理莫斯科大学:姜增如第6讲主讲内容2异常处理机制3Python的包及使用1文件操作一、Python的文件操作1、打开文件--open函数语法格式:fileobject=open(name[,mode][,buffering])其中:name:变量表示要访问的文件名称字符串值。mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。buffering:若该值为0,则不寄存,值为1,访问文件时会寄存行,若该值为大于1的整数,表明了该值即为寄存区缓冲大小。若取负值,寄存区的缓冲大小则为系统默认。若该文件无法打开,会抛出系统错误信息。若打开的文件写入中文:如若读写文件含有中文:FileObject=open(“文件名","w+",encoding='utf8');注意:使用open()方法一定要保证关闭文件对象,即调用close()方法

Python对文件的基本操作概括为:打开文件、文件操作、关闭文件mode取值不同模式打开文件的完全列表:模式描述t文本模式(默认)。x写模式,新建一个文件,如果该文件已存在则会报错。b二进制模式。+打开一个文件进行更新(可读可写)。U通用换行模式(不推荐)。r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。r+打开一个文件用于读写。文件指针将会放在文件的开头。rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。用于非文本文件如图片等。w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。wb用于写入二进制格式并打开一个文件,若文件存在则打开从头编辑,原有内容会被删除。若文件不存在,创建新文件。一般用于非文本文件如图片等。w+打开一个文件用于读写。若文件存在则打开文件从开头编辑,原有内容会被删除。若文件不存在,创建新文件。wb+用于读写二进制格式文件。若文件存在则打开从头开始编辑,原有内容会被删除。若文件不存在,创建新文件。一般用于非文本文件如图片等。a用于追加文件。若文件存在,文件指针将放在文件结尾,将新的内容写入到已有内容之后。若文件不存在,创建新文件进行写入。ab用于追加二进制格式文件,若文件存在,文件指针将会放在文件的结尾。新的内容将会追加到已有内容之后。若文件不存在,创建新文件进行写入。a+打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。打开时会是追加模式,若文件不存在,创建新文件用于读写。ab+用于追加二进制格式文件,若文件存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件用于读写。(1)读取文件FileObject.read(size);#读取size指定的字节数FileObject.readline();#读取指针所在行FileObject.readlines();#读取文件列表,每项是以\n结尾的字符串(2)写文件FileObject.write(“字符串”);#把文本或二进制数据写入到文件中FileObject.writelines();#针对列表操作,把字符串列表写入文件中(3)定位操作FileObject.tell()#输出文件当前位置FileObject.seek(os.SEEK_SET)#输出当前指针FileObject.seek(0)#回到文件的开头FileObject.seek(1)#返回文件的当前位置FileObject.seek(2)#到文件的末尾2、文件操作函数如果读写的文件中有中文,必须加入:encoding='utf-8'(1)其他操作:追加、计算等FileObject=open(‘已经存在的文件名','a',encoding='utf8')FileObject.write(“追加的内容")(2)关闭文件FileObject.close()3、文件关闭--close函数序号方法功能描述1file.close()关闭文件。关闭后文件不能再进行读写操作。2file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件。3file.fileno()返回一个整型的文件描述符,用于如os模块的read()底层操作4file.isatty()如果文件连接到一个终端设备返回True,否则返回False。5file.next()返回文件下一行。6file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。7file.readline([size])读取整行,包括"\n"字符。8file.readlines([sizeint])读取所有行并返回列表,若sizeint>0,则设置一次读多少字节9file.seek(offset[,whence])设置文件当前位置10file.tell()返回文件当前位置。11file.truncate([size])截取文件,截取的字节通过size指定,默认为当前文件位置。12file.write(str)将字符串写入文件,返回的是写入的字符长度13file.writelines(sequence)向文件写入一个序列字符串,若需要换行则要自己加入每行的换行符。4、file对象常用函数5、Os对文件夹操作常用方法序号方法功能描述1os.getcwd()得到当前工作路径2os.listdir()返回指定目录下的所有文件和目录名3os.remove()用来删除一个文件4os.removedirs(r”c:\Python”)删除多个目录5os.path.isfile()检验给出的路径是否是一个文件6os.path.isdir()检验给出的路径是否是一个目录7os.path.isabs()判断是否是绝对路径8os.path.exists()检验给出的路径是否存在9os.mkdir("file")

/os.rmdir("file")

创建文件夹/删除文件夹10os.rename(old,new)重命名11os.exit()终止当前进程12os.path.getsize(filename)获取文件大小13os.stat(file)获取文件属性序号方法功能描述1shutil.copyfile(“源文件”,“新文件")

复制文件2shutil.copy('源文件','目标地址')复制文件,返回复制后的路径3shutil.move(“源地址”,“目标地址")

移动文件或文件夹4shutil.copytree(“源文件夹”,“新文件夹")

复制文件夹5shutil.rmtree(“文件目录")移除整个文件夹,无论是否为空6shutil.copyfileobj(open('源文件','r'),open('目标文件','w')文件copy到另一个文件中7shutil.make_archive('目标文件路径','归档文件后缀','需归档文件夹')归档操作,返回归档文件最终路径8shutil.unpack_archive('归档文件路径','解包目标文件夹')解包操作,若文件夹不存在会新建文件夹shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作,使用时需要导入importshutil即可6、shutil对文件操作函数文件名:test.py文件当前位置是:63读取写入的字符串是Ibegantolearntowritedocumentswelcome!是否已关闭:False访问模式:w+是否已关闭:Truewww.smbu.

Ibegantolearntowritedocuments

welcome!例1读写文件的使用importos

op=open("test.py","w+");

print("文件名:",)

op.write("www.smbu.\nIbegantolearntowritedocuments\nwelcome!");

print("文件当前位置是:",op.tell())op.seek(os.SEEK_SET)#输出当前指针

context=op.read()

#设置指针回到文件最初

print("读取写入的字符串是\n",context)print("是否已关闭:",op.closed)

print("访问模式:",op.mode)

op.close();

print("是否已关闭:",op.closed)文件的读写方式选择文件名:test1.py深圳北理莫斯科大学网址地址:深圳北理莫斯科大学['深圳北理莫斯科大学\n','网址地址:\n','']例2op=open("test1.py","w+");print("文件名:",)op.write("深圳北理莫斯科大学\n网址地址:\");position=op.seek(0);#指针移动到开始位置str=op.read(60);#指定读取的字节数print(str)position=op.seek(0)#注意移动指针str1=op.readline()#读1行print(str1)position=op.seek(0)str2=op.readlines()#读所有行print(str2)f=open("test2.py",'r',encoding='utf8')#返回一个文件对象position=f.seek(0)#注意移动指针line=f.readline()#读第一行print(line)whileline:

#读所有行print(line,end='')line=f.readline()f.close()深圳北理莫斯科大学是一所中外合作大学,由深圳、北京理工大学和莫斯科大学联合创办。使用二种方法读文件例3['深圳北理莫斯科大学是一所中外合作大学,由深圳、北京理工大学和莫斯科大学联合创办。,欢迎进入深圳北理莫斯科大学学习,本学期学习的计算机语言包括:\n','Python、C++']例4追加文件数据op=open('test2.txt','a',encoding='utf8')op.write(“,欢迎进入深圳北理莫斯科大学学习")strs=[‘,本学期学习的计算机语言包括:','\nPython、','C++']op.writelines(strs)#写入字符列表内容op.close()op=open("test2.txt","r+",encoding='utf8');str3=op.readlines()#读所有文件print(str3)op.close()例5使用shutil及os模块的文件及文件夹操作importshutilimportosshutil.copyfile("test2.txt","test3.txt")#复制test2.txt到test3.txtos.rename("test3.txt","test5.txt")#重命名文件test3.txt到test4.txt。os.path.exists("test2.txt")#判断text2.txt文件是否存在os.remove("test2.txt")#删除一个已经存在的文件test2.txtos.mkdir("dirtest")#创建目录testos.chdir("/newdir2")#将当前目录改为"newdir2"os.getcwd()#显示当前目录os.rmdir("/test")#删除文件夹test二、Python的异常处理1、什么是异常在Python中,异常也是对象,可对它进行操作。BaseException是所有内置异常的基类,但用户定义的类并不直接继承BaseException,所有的异常类都是从Exception继承,且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。若没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用Python默认的异常处理器,并在终端输出异常信息。BaseException#所有异常的基类

+--SystemExit#解释器请求退出

+--KeyboardInterrupt#用户中断执行(通常是输入^C)

+--GeneratorExit#生成器(generator)发生异常来通知退出

+--Exception#常规异常的基类2、内置异常类的层次结构

+--ArithmeticError

#各种算术错误引发的内置异常的基类

|

+--FloatingPointError

#浮点计算错误

|

+--OverflowError

#数值运算结果太大无法表示

|

+--ZeroDivisionError

#除(或取模)零(所有数据类型)+--BufferError

#无法执行与缓冲区相关的操作时引发+--ImportError

#导入模块/对象失败异常名称功能描述IOError输入/输出操作失败OSError操作系统错误WindowsError系统调用失败ImportError导入模块/对象失败LookupError无效数据查询的基类IndexError序列中没有此索引(index)KeyError映射中没有这个键MemoryError内存溢出错误(对于Python解释器不是致命的)NameError未声明/初始化对象(没有属性)UnboundLocalError访问未初始化的本地变量ReferenceError弱引用(Weakreference)试图访问已经垃圾回收了的对象RuntimeError一般的运行时错误NotImplementedError尚未实现的方法3、Python标准异常方法BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit生成器(generator)发生异常来通知退出StandardError所有的内建标准异常的基类ArithmeticError所有数值计算错误的基类FloatingPointError浮点计算错误OverflowError数值运算超出最大限制ZeroDivisionError除(或取模)零(所有数据类型)AssertionError断言语句失败AttributeError对象没有这个属性EOFError没有内建输入,到达EOF标记EnvironmentError操作系统错误的基类异常名称描述SyntaxErrorPython语法错误IndentationError缩进错误TabErrorTab和空格混用SystemError一般的解释器系统错误TypeError对类型无效的操作ValueError传入无效的参数UnicodeErrorUnicode相关的错误UnicodeDecodeErrorUnicode解码时的错误UnicodeEncodeErrorUnicode编码时错误UnicodeTranslateErrorUnicode转换时错误Warning警告的基类DeprecationWarning关于被弃用的特征的警告FutureWarning关于构造将来语义会有改变的警告OverflowWarning旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning关于特性将会被废弃的警告RuntimeWarning可疑的运行时行为(runtimebehavior)的警告SyntaxWarning可疑的语法的警告UserWarning用户代码生成的警告说明:异常BaseException是所有内置异常的基类。它不是直接由用户定义的类继承(为此使用Exception)。如果

str()或者unicode()是在这个类的一个实例上被调用,返回实例的参数表示,或者当没有参数时,返回空字符串。Args是给异常构造函数的元组元组。一些内置异常(如IOError)期望一定数量的参数,并为此元组的元素分配特殊含义,而其他异常通常仅使用单个字符串给出错误消息。异常Exception是所有内置的,非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。4、标准异常处理结构(

try…except…finally)try

块包含着可能引发异常的代码;except

块则用来捕捉和处理发生的异常;finally不管执行try还是execpt,最后的finally都会被执行。try:

s=eval(input('请输入整数:'))

ls=s*2

print(ls)

except:

print('请输入整数')finally:print

('这里是将字符转换为数值')请输入整数:python请输入整数这里是将字符转换数值结果:try:可能发生异常的语句块exceptException1:处理Exception1错误finally:

语句块

例6标准异常处理出现错误Hello,Howdoyoudo!程序继续运行若不加try。执行到第2句出现错误,会中断程序,加入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句。找到except语句后,会调用这个自定义的异常处理器。except将异常处理完毕后,程序继续往下执行。except后面也可以为空,表示捕获任何类型的异常。例7简单异常处理结果:s='Hello,Howdoyoudo!'try:

print(s[100])exceptIndexError:

print('出现错误')finally:

print(s)print('程序继续运行')s=[]

try:

foriinrange(1,10,2):

s.append(i)

except:

print('error')

print(s)例8下列程序分别将赋值s=[]和s=‘’结果相同的吗?

s=‘’

try:

foriinrange(1,10,2):

s.append(i)

except:

print('error')

print(s)结果:[1,3,5,7,9]结果:error''finally语句表示,无论异常发生与否,finally中的语句都要执行。但是,由于没有except处理器,finally执行完毕后程序便中断。这种情况下,出现中断程序运行。如果try语句中没有异常,三个print都会执行。出现错误Hello,Howdoyoudo!Traceback(mostrecentcalllast):File"D:\tools\PyCharm\bin\t3.py",line3,in<module>print(s[100])IndexError:stringindexoutofrange例9添加finally异常处理结果:s='Hello,Howdoyoudo!'try:

print(s[100])finally:

print(s)print('程序继续运行')5、多异常处理结构(try....except...else…finally)语法格式:try:语句#判断是否出现异常,若没有异常处理,直接停止执行程序Except异常名称1:#接受异常名称1的参数,并做异常处理

捕捉try中的异常,并根据异常抛出处理信息except异常名称2:#接受异常名称2参数,并做异常处理语句#这里执行异常处理的相关代码,打印输出等else:#如果没有异常则执行else

语句#try部分被正常执行后执行的代码finally:

语句#退出try语句块总会执行的程序捕捉异常可以使用try/except语句,使用try检测语句块中的错误,使用except语句捕获异常信息并处理。若不想在异常发生时结束程序,只需在try里捕获它。try的工作原理:当开始一个try语句后,Python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。如果当try后的语句执行时发生异常,Python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。如果在try子句执行时没有发生异常,Python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。deftry_exception(num):#函数中做异常检测

try:returnint(num)exceptValueError,arg:print(arg,“不是合法数据“)else:

print(“这个是输入的数据“)try_exception('xxx')#输出异常值Invalideliteralforint()withbase10:'xxx'isnotanumber不要在try里写返回值。try-except-else里都是指做某事,而不是处理返回。如果在try里面写返回值,则else部分是不能执行的语句。0作为除数的异常处理try:1/0exceptExceptionase:'''异常的父类,可以捕获所有的异常'''print("0不能做除数")else:'''保护不抛出异常的代码'''print("没有异常")finally:print("最后总是要执行的语句")0不能做除数最后总是要执行的语句例10结果:三、Python中的包为了Python代码进行组织管理,使用包和模块将按照相似功能的代码整理到一起方便统一管理,以提升代码可读性和代码质量,方便在项目中进行协同开发。1、包和模块的定义包(package):是含有多个Python文件/模块的文件夹,并且文件夹中有一个名称为__init__.py的特殊声明文件,则这个文件夹就是一个包(模块包),可将大量功能相关的Python模块包含起来统一管理,同样也可被其他模块通过import关键字引入重复使用封装的模块和代码。模块(module):每个Python文件就是一个模块,每个Python文件中,封装类似功能的变量、函数、类型等,可被其他的Python模块通过import关键字引入重复使用。例如:在工作目录workspace/文件夹中创建了文件test.py,这就是一个工具模块;在demo01/文件夹中,创建了一个文件夹modules/,里面创建一个空文件__init__.py,User1.py,User2.py..,modules就是程序包。2、包和模块的引入语法格式:import包/模块或from包/模块import具体对象import引入的包和模块会自动从当前文件夹中、系统环境变量PythonPATH中、以及系统的sys.path路径中查询是否存在该名称的包/模块,如不存在,就会出现错误信息。引入模块后,即可使用模块中的数据、函数.变量。fromxximport语法方式,主要是针对出现了包结构的Python代码而特定的代码引入方式,首先要非常明确代码的组织结构才能正确使用fromimport语法进行代码的引入和复用,包和模块的相对引入,一定要切记:引入的路径相对当前文件;执行的路径相对于引入的最外层文件夹。模块中包含局部变量和全局变量,被其他模块引入使用的只有当前模块中的全局变量。在package_1文件夹下存在4个模块user1.py,user2.py,__init

温馨提示

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

评论

0/150

提交评论