第五章文件io和异常处理_第1页
第五章文件io和异常处理_第2页
第五章文件io和异常处理_第3页
第五章文件io和异常处理_第4页
第五章文件io和异常处理_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

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

文档简介

第五章文件IO和异常处理胡腾

知行楼314第五章文件IO和异常处理Python文件I/OPython异常处理

Python文件I/O打印到屏幕上产生输出最简单的方法是使用print语句,可以通过用逗号分隔的零个或多个表达式。该函数将传递到一个字符串表达式,并将结果写到标准输出,如下所示:#!/usr/bin/python

print"Pythonisreallyagreatlanguage,","isn'tit?";这将产生结果输出在标准屏幕上,结果如下:Pythonisreallyagreatlanguage,isn'tit?读取键盘输入Python提供了两个内置的函数来读取一行,从标准输入,默认情况下是来自键盘的文本。这些函数包括:raw_inputinput

help查看Python文件I/OPython格式化输出

1.打印字符串

print(“Hisnameis%s”%(“Aviad”))

2.打印整数

print(“Heis%dyearsold”%(25))

3.打印浮点数

print(“Hisheightis%fm”%(1.83))

4.打印浮点数(指定保留小数点位数)

print(“Hisheightis%.2fm”%(1.83))

Python文件I/Oraw_input

函数

raw_input([prompt])函数从标准输入读取一行并返回一个字符串(去掉结尾的换行)。str=raw_input("Enteryourinput:");print"Receivedinputis:",str

这将提示您输入字符串,它会在屏幕上显示相同的字符串。当输入“HelloPython!”,它的输出是这样的:Enteryourinput:HelloPythonReceivedinputis:HelloPythoninput函数input([prompt])函数相当于raw_input,只是它假设输入的是一个有效的Python表达式,并返回计算结果。str=input("Enteryourinput:");print"Receivedinputis:",str

对所输入这将产生结果如下:Enteryourinput:[x*5forxinrange(2,10,2)]Recievedinputis:[10,20,30,40]Python文件I/O打开和关闭文件到现在为止,已经了解读取和写入标准输入和输出。现在,我们看看如何用实际数据文件。Python提供了基本的函数和必要在默认情况下对文件进行操作的方法。可以使用一个文件对象file来做大部分文件操作。Python文件I/Oopen

函数想要读取或写入文件,必须使用Python内置的open()函数来打开它。该函数创建一个文件对象,这将用来调用与之关联的其他支持方式。语法fileobject=open(file_name[,access_mode][,buffering])下面是参数的详细信息:file_name:

file_name参数是一个字符串值,包含您要访问的文件的名称。access_mode:

access_mode决定了文件必须被打开,即,读,写,追加等的可能值是下表中给定的一个完整的列表的模式。这是可选参数,默认文件存取方式为read(r)。buffering:

如果缓冲值被设置为0时,没有缓冲将发生。如果该缓冲值是1,行缓冲会在访问一个文件来执行。如果指定的缓冲值为大于1的整数,则缓冲作用将与所指示的缓冲区的大小进行。如果为负,则缓冲区的大小是系统默认(默认行为)。这里是打开一个文件的​​不同模式的列表:Python文件I/O模式描述r打开一个文件为只读。文件指针置于该文件的开头。这是默认模式。rb打开一个文件只能以二进制格式读取。文件指针置于该文件的开头。这是默认模式。r+打开用于读取和写入文件。文件指针将会在文件的开头。rb+打开用于读取和写入二进制格式的文件。文件指针将会在文件的开头。w打开一个文件只写。覆盖该文件,如果该文件存在。如果该文件不存在,则创建用于写入一个新的文件。wb打开一个文件只能以二进制格式写入。覆盖该文件,如果该文件存在。如果该文件不存在,则创建用于写入一个新的文件。w+打开用于写入和读取的文件。覆盖现有的文件,如果文件存在。如果该文件不存在,则创建读取和写入新的文件。wb+打开用于写入和读取的二进制格式的文件。覆盖现有的文件,如果文件存在。如果该文件不存在,则创建读取和写入新的文件。a将打开追加文件。文件指针是在文件的结尾。也就是说,该文件是在附加模式。如果该文件不存在,它创造了写入一个新的文件。ab将打开追加的二进制格式的文件。文件指针在该文件的结束。也就是说,该文件为追加模式。如果该文件不存在,它创建并写入一个新的文件。a+打开为追加和读取文件。文件指针在该文件的结束。该文件将为追加模式。如果该文件不存在,它创建并读取和写入的新文件。ab+打开两个追加和读取的二进制格式的文件。文件指针在该文件的结束。该文件将在追加模式。如果该文件不存在,它创建并读取和写入的新文件。Python文件I/Ofile

对象属性一旦文件被打开,文件对象可以得到有关该文件的各种信息。下面是文件对象相关的所有属性的列表:file.closed如果文件被关闭则返回true,否则返回false。file.mode返回该文件被打开的访问模式。返回文件的名称。file.softspace如果空间明确要求具有打印返回false,否则返回true。属性描述Python文件I/O例#!/usr/bin/python

#Openafilefo=open("foo.txt","wb")print"Nameofthefile:",print"Closedornot:",fo.closedprint"Openingmode:",fo.modeprint"Softspaceflag:",fo.softspace这将产生以下结果:Nameofthefile:foo.txtClosedornot:FalseOpeningmode:wbSoftspaceflag:0Python文件I/Oclose()

方法一个文件对象的close()方法刷新未写入的信息,并关闭该文件的对象,在这之后没有数据内容可以执行写入。Python自动关闭,当文件的引用对象被重新分配给另外一个文件。它是使用close()方法来关闭文件是一个很好的做法。语法fileObject.close();例#!/usr/bin/python

#Openafilefo=open("foo.txt","wb")print"Nameofthefile:”,

#Closeopendfilefo.close()这将产生以下结果:Nameofthefile:foo.txtPython文件I/O读取和写入文件file对象提供了一组访问方法。我们来看看如何使用read()和write()方法来读取和写入文件。write()

方法write()方法写入字符串到任何一个打开的文件。要注意的是Python字符串可以具有二进制数据,而不仅仅是文字。write()方法不要将换行字符('')添加到字符串的结尾语法fileObject.write(string);这里,传递的参数是要写入到打开的文件的内容。Python文件I/O例#!/usr/bin/python

#Openafilefo=open("foo.txt","wb")fo.write("Pythonisagreatlanguage.Yeahitsgreat!!");

#Closeopendfilefo.close()上面的方法会创建foo.txt文件,并会将给定的内容写在该文件中,并最终将关闭该文件。Pythonisagreatlanguage.Yeahitsgreat!!Python文件I/Oread()

方法read()方法读取一个打开的文件的字符串。要注意的是Python字符串可以具有二进制数据,而不仅仅是文本。语法fileObject.read([count]);这里,传递的参数是从打开的文件中读出的字节数。此方法从该文件的开头读取,如果计数丢失,那么它会尝试尽可能多地读取,直到文件的末尾。例这里以一个文件foo.txt作为例子,这是在上面创建的。#!/usr/bin/python

fo=open("foo.txt","r+")str=fo.read(10);print"ReadStringis:",strfo.close()这将产生以下结果:ReadStringis:PythonisPython文件I/O逐行读入:readline()

一次读入:readlines()Python文件I/O文件位置tell()方法告诉该文件中的当前位置;换句话说,下一个读取或写入将发生在从该文件的开头的字节数。seek(offset[,from])方法会更改当前的文件位置。偏移参数指示要移动的字节数。从该参数指定字节将被移至参考点。如果from被设置为0,这意味着使用该文件的开始处作为基准位置,设置为1则是使用当前位置作为基准位置,如果它被设置为2,则该文件的末尾将被作为基准位置。Python文件I/O(例)让我们以一个文件foo.txt,这是上面创建#!/usr/bin/python

#Openafilefo=open("foo.txt","r+")str=fo.read(10);print"ReadStringis:",str

#Checkcurrentpositionposition=fo.tell();print"Currentfileposition:",position

#Repositionyiibaieratthebeginningonceagainposition=fo.seek(0,0);str=fo.read(10);print"AgainreadStringis:",str#Closeopendfilefo.close()这将产生以下结果:ReadStringis:PythonisCurrentfileposition:10AgainreadStringis:PythonisPython文件I/O重命名和删除文件Python的os模块提供了一些方法,可以帮助执行文件处理操作,如重命名和删除文件。要使用这个模块,需要先导入它,然后调用相关的功能。rename()方法rename()方法有两个参数,当前文件名和新文件名。语法os.rename(current_file_name,new_file_name)以下是例子来重命名文件test1.txt:#!/usr/bin/pythonimportos

#Renameafilefromtest1.txttotest2.txtos.rename("test1.txt","test2.txt")Python文件I/Oremove()

方法可以使用remove()方法通过提供参数作为文件名称作为要删除的文件。语法os.remove(file_name)以下为示例删除现有文件test2.txt:#!/usr/bin/pythonimportos

#Deletefiletest2.txtos.remove("text2.txt")Python中的目录所有的文件都包含不同的目录中,而在Python中处理这些没有问题。os模块有几种方法,可以帮助创建,删除和更改目录。Python文件I/Omkdir()

方法可以使用os模块的mkdir()方法在当前目录下创建目录。需要提供参数,这个方法包含的目录要创建的名称。语法os.mkdir(“newdir”)以下为示例在当前目录下创建test目录如下所示:#!/usr/bin/pythonimportos

#Createadirectory"test”os.mkdir("test")chdir()

方法可以使用chdir()方法来改变当前目录。chdir()方法接受一个参数,那就是要成为当前目录的目录的名称。语法os.chdir(“newdir”)下面是一个进入“/home/newdir”目录的例子:#!/usr/bin/pythonimportos

#Changingadirectoryto"/home/newdir“os.chdir("/home/newdir")Python文件I/Ogetcwd()

方法getcwd()方法显示当前的工作目录。os.getcwd()例以下是例子给定为当前目录:#!/usr/bin/pythonimportos

#Thiswouldgivelocationofthecurrentdirectoryos.getcwd()Python文件I/Ormdir()

方法rmdir()命令方法删除目录,它是通过方法的参数。在删除一个目录,它的所有内容应该被删除。os.rmdir('dirname')下面是一个例子删除“/tmp/test”目录。它是必需的,得到的目录完全的名称,否则将搜索在当前目录中的目录。#!/usr/bin/pythonimportos

#Thiswouldremove"/tmp/test"directory.os.rmdir("/tmp/test")文件和目录相关的方法有三个重要来源,它提供了一些工具和方法来处理和操作在Windows和Unix操作系统的文件和目录。它们如下:File对象方法:

文件file对象提供函数来对文件进行操作。OS对象方法:这提供了一些方法来处理的文件以及目录。Python异常处理Python提供了两个非常重要的功能,以处理在Python程序任何异常错误,并增加调试功能:异常处理:这将包括在本教程中。这是在Python中可用列表标准异常:标准异常

。Python异常处理异常是一个事件,其中一个程序,破坏程序的指令的正常流的执行过程中而发生的。一般情况下,当一个Python脚本遇到一些情况不能处理,就抛出一个异常。异常是一个Python对象,它表示一个错误。当Python脚本抛出一个异常,它必须处理异常,否则将立即终止。什么是异常?

Python异常处理如果有可能会引发异常的一些可疑的代码,就可以通过将可疑的代码在一个try块:保卫你的程序。在try块,包括以下情况except:语句,其次是代码,作为优雅的处理问题,尽可能块。处理异常

Python异常处理这里是try....except...else块的简单语法:try:Youdoyouroperationshere;......................exceptExceptionI:IfthereisExceptionI,thenexecutethisblock.exceptExceptionII:IfthereisExceptionII,thenexecutethisblock.......................else:Ifthereisnoexceptionthenexecutethisblock.这里有一些关于上述语法要点:单个try语句可以有多个不同的语句。当try块中包含可能会引发不同类型的异常语句,这是很有用的。也可以提供一个通用的except子句,它用来处理任何异常。

except子句后,可以包括其他子句。块没有引发异常:在别的块中的代码,如果在try中的代码执行。在else块是不需要try:块的代码的保护。Python异常处理(例)这里是简单的例子,这将打开一个文件并写入内容的文件中并移出正常:#!/usr/bin/pythontry:fh=open("testfile","w")fh.write("Thisismytestfileforexceptionhandling!!")exceptIOError:print"Error:can'tfindfileorreaddata"else:print"Writtencontentinthefilesuccessfully"fh.close()这将产生以下结果:WrittencontentinthefilesuccessfullyPython异常处理(例)这里有一个更简单的例子,它试图打开没有权限并在文件中写入内容,所以它会引发一个异常:#!/usr/bin/pythontry:fh=open("testfile","r")fh.write("Thisismytestfileforexceptionhandling!!")exceptIOError:print"Error:can'tfindfileorreaddata"else:print"Writtencontentinthefilesuccessfully"这将产生以下结果:Error:can'tfindfileorreaddataPython异常处理在except子句无异常:还可以使用不同的定义如下无异常的声明:try:Youdoyouroperationshere;......................except:Ifthereisanyexception,thenexecutethisblock.......................else:Ifthereisnoexceptionthenexecutethisblock.try-except语句捕获所有出现的异常。使用这种try-except声明不被认为是一个良好的编程习惯,但因为它捕获所有异常,但不会使程序员找出可能出现的问题的根本原因。Python异常处理在except子句的多个异常:也可以使用相同的除语句来处理多个异常,如下所示:try:Youdoyouroperationshere;......................except(Exception1[,Exception2[,...ExceptionN]]]):Ifthereisanyexceptionfromthegivenexceptionlist,thenexecutethisblock.......................else:Ifthereisnoexceptionthenexecutethisblock.Python异常处理try-finally语句可以使用finally:块连同try:块。在try块是否引发异常或没有任何代码finally块是一个必须执行的块。try-finally语句的语法是这样的:try:Youdoyouroperationshere;......................Duetoanyexception,thismaybeskipped.finally:Thiswouldalwaysbeexecuted.......................请注意,可以提供except子句或finally子句,但不能同时使用。不能同时使用else子句与finally子句。Python异常处理(例)#!/usr/bin/pythontry:fh=open("testfile","w")fh.write("Thisismytestfileforexceptionhandling!!")finally:print"Error:can'tfindfileorreaddata"如果没有权限,以写入方式打开文件,那么这将产生以下结果:Error:can'tfindfileorreaddataPython异常处理同样的例子可以写入更简洁,如下所示:#!/usr/bin/pythontry:fh=open("testfile","w")try:fh.write("Thisismytestfileforexceptionhandling!!")finally:print"Goingtoclosethefile"fh.close()exceptIOError:print"Error:can'tfindfileorreaddata"当一个异常被抛出在try块中,执行立即传递到finally块。finally块中的所有语句都执行,该异常被再次抛出,并在被处理except语句如果出现在一个更高的层在try-except语句。Python异常处理Exception参数异常可以有一个参数,参数是一个值,它给出了关于这个问题的其他信息。参数按异常内容改变。可以通过不同的子句提供一个变量,如下所示捕获异常的参数:try:Youdoyouroperationshere;......................exceptExceptionType,Argument:YoucanprintvalueofArgumenthere...如果正在编写代码来处理一个异常,可以有一个变量按照异常的名称在不同的声明。如果捕捉多个异常,可以有一个变量按照异常的元组。这个变量将接收主要包含异常原因的异常值。该变量可以在一个元组的形式接收一个或多个值。该元组通常包含错误串,错误码和一个错误的位置。Python异常处理(例)下面是一个异常的例子:#!/usr/bin/python#Defineafunctionhere.deftemp_convert(var):try:returnint(var)exceptValueError,Argument:print"Theargumentdoesnotcontainnumbers",Argument#Callabovefunctionhere.temp_convert("xyz");这将产生以下结果:Theargumentdoesnotcontainnumbersinvalidliteralforint()withbase10:'xyz'Python异常处理抛出异常:可以通过使用raise语句抛出几个方面的异常。一般raise语句的语法。语法raise[Exception[,args[,traceback]]]这里,Exception是异常的类型(例如,NameError)和参数是用于异常的参数值。该参数是可选的;如果未提供,则异常的参数是None。最后一个参数traceback,也是可选的(并且在实践中很少使用),并且如果存在的话,那么用于异常回溯对象。Python异常处理(例)异常可以是一个字符串,一个类或一个对象。大多数Python核心抛出是类,有参数认为是类的实例的异常。定义新的异常是很容易的,可以参考如下:deffunctionName(level):iflevel<1:raise"Invalidlevel!",level#Thecodebelowtothiswouldnotbeexecuted#ifweraisetheexception注:为了捕获一个异常,“except”语句必须引用抛出类对象或简单的字符串相同的异常。例如,捕捉到上面的异常,必须写except子句,如下所示:try:BusinessLogichere...except"Invalidlevel!":Exceptionhandlinghere...else:Restofthecodehere...Python异常处理用户定义的异常Python中,还可以通过内置的异常标准的派生类来创建自己的异常。下面是有关RuntimeError一个例子。这里是从RuntimeError子类的类被创建。当需要显示更多的具体信息时,一个异常被捕获,这是很有用的。在try块中,用户定义的异常引发,并夹在except块。变量e被用来创建类Networkerror的一个实例。classNetworkerror(RuntimeError):def__init__(self,arg):self.args=arg所以一旦在上面定义的类,可以按如下方法抛出异常:try:raiseNetworkerror("Badhostname")exceptNetworkerror,e:printe.argsPython异常处理Python异常处理IndexError当在一个序列中没有发现的索引引发。KeyError如果在字典中找不到指定的键触发。NameError当在局部或全局命名空间是没有找到一个标识符引发。UnboundLocalError试图访问在函数或方法的局部变量时引发但没有值已被分配给它。EnvironmentErrorPython环境以外发生的所有异常的基类。IOError当试图打开一个不存在的文件时,输入/输出操作失败,如打印语句或open()函数引发。OSError触发当出现操作系统相关的错误。SyntaxErrorPython语法错误引发。IndentationError没有正确指定缩进引发。SystemError翻译时发现内部问题,但是当遇到此错误Python解释器不会退出引发。SystemExit当Python解释器通过使用sy

温馨提示

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

评论

0/150

提交评论