比尔云BierYun--阿里云最新优惠活动
阿里云优惠码丨阿里云代金券

Python学习(23)–文件操作2与异常处理

Python学习(23)–文件操作2与异常处理http://www.bieryun.com/2375.html

这一节我们将会继续介绍有关文件操作的内容,Python中的os模块为我们提供了许多操作文件的函数,我们将一一介绍这些函数的功能意义及使用方法。在我们对文件操作时,程序可能会因为某些逻辑错误而中断,比如我们打开一个文件时,硬盘上并不存在这个文件,就会报一个IOError的错误信息,这就是Python中的异常,本节将介绍这些异常以及异常的处理。

(1)os模块的常见函数

①mkdir(path)和makedirs(path)

os模块中函数mkdir(path)表示创建一个目录,而makedirs(path)表示创建多级目录,参数path为目录的名字。使用makedirs(path)创建多级目录时,目录名使用”/”隔开。如下:

 

[python] view plain copy

  1. import os
  2. os.mkdir(“test”)
  3. os.makedirs(“a/b/c”)

 

如上,在导入模块os之后就可以使用os中的文件操作函数了,os.mkdir(“test”),表示在当前项目路径下创建一个名为”test”的文件目录,os.makedirs(“a/b/c”)表示在当前项目路径下创建多级目录,即在当前项目路径下创建a目录,a目录下创建b目录,b目录下创建c目录。如下,为程序运行完成后,我们使用命令窗口看到的文件目录结构,如下:

②目录删除rmdir(path)

os模块中的函数rmdir(path)用于文件目录的删除,path指定被删除目录的名字,之前我们在当前项目路径下创建了名字为”test”的目录,以及多级目录\a\b\c。现在我们来删除创建的目录,如下:

 

[python] view plain copy

  1. import os
  2. os.rmdir(“test”)
  3. os.rmdir(“a”)

 

查看执行程序后目录是否存在:

可以看到目录test被删除,但是目录a仍然存在,再观察控制台的打印结果:

可以看到程序报出异常,目录a不是空的,这是因为a目录下还存在文件,这种情况下是不能删除目录的,而目录test下并没有目录文件,所以可以被删除。

③listdir(path)

os模块下的函数listdir(path),返回的是一个文件列表,当path为一个目录时,返回的是该目录下的所有文件;当path=”.”,返回的是当前项目路径下的有所文件;当path=”/”时,返回的是当前程序文件所有父级目录文件.如下代码:

[python] view plain copy

  1. import os
  2. print(os.listdir(“a”))#打印目录a下的文件列表
  3. print(os.listdir(“.”))#打印当前项目路径下的文件列表
  4. print(os.listdir(“/”))#打印当前文件所有父级目录文件

 

如上程序,path=”a”时,打印的是当前项目路径下目录a的文件列表;当path=”.”时,打印的是当前项目路径下的文件列表;path=”/”,打印当前程序文件的所有父级目录文件列表。打印结果如下:

④getcwd()和chdir(path)

os模块中函数getcwd()为获取当前目录路径;chdir(path)为从当前目录切换到另一个目录,path为切换后的目录。代码如下:

[python] view plain copy

  1. import os
  2. print(os.getcwd())#获取当前目录
  3. os.chdir(“a”)#切换到目录a
  4. print(os.getcwd())

如上,os.getcwd()为获取当前目录路径,在没有切换目录之前,当前目录就是当前的项目路径;os.chdir(“a”),是将目录切换到当前项目路径下的a目录下,切换后再打印当前目录,如下:

在函数chdir(path)中,当path=”/”时,表示将目录切换到当前目录的父级目录,如下:

[python] view plain copy

  1. import os
  2. print(os.getcwd())
  3. os.chdir(“/”)#将目录切换到当前目录的父级目录
  4. print(os.getcwd())

 

如上,os.chdir(“/”)中path=”/”,整个程序为将目录切换到当前项目路径的父级目录,打印结果如下:

⑤walk(path)函数

os模块中的函数walk(path)的功能为遍历目录path下的所有文件。下面我们就来使用walk(path)函数来对一个目录进行遍历。如下,我们对项目路径下,一个名为”testdir”的目录进行遍历,目录testdir的目录结构如下:

如上,在当前项目路径下存在目录testdir,该目录下有3个文件(f1.txt,f2.txt,f3.txt)和一个目录(jpg),其中jpg目录下又有3个文件(1.jpg,2.jpg,3.jpg)。程序如下:

[python] view plain copy

  1. import os
  2. g=os.walk(“testdir”)
  3. print(g)
  4. for i in g:
  5.     print(i)

打印结果如下:

如上程序代码,os.walk(“testdir”)遍历目录testdir下所有目录下的文件,结果返回的是一个生成器对象g,通过遍历这个对象g可以获取遍历所得到的文件信息。g中的元素是由元组组成,每个元组有3个子元素。第一个元素为当前被遍历的目录currentPath,第二个元素为currentPath下的所有子目录列表,第三个元素为currentPath下的所有的文件。

如上结果,遍历目录testdir时,testdir下的子目录列表为[‘jpg’],testdir下的所有文件列表为[‘f1.txt’,’f2.txt’,’f3.txt’];遍历testdir下的子目录jpg时,因为目录jpg下没有子目录,所以子目录列表为空列表[],[‘1.jpg’,’2.jpg’,’3.jpg’]为目录jpg下的文件列表。遍历所得结果符合如上的testdir的目录结构。

⑥函数join(path,filename)

函数join(path,filename)为os模块中path模块下的一个函数,功能为将目录path和文件名filename通过字符”/”连接起来,最后返回字符串path+”/”+filename组成文件filename的完整路径信息。如下代码:

[python] view plain copy

  1. import os
  2. path=os.getcwd()
  3. print(os.path.join(path,“test17.py”))

如上为先获取当前项目路径所在目录currentPath,该目录下有一个文件test17.py,通过函数join(path,filename)返回test17.py的完整的路径信息,即currentPath+”/”+test17.py,打印结果如下:

(2)文件遍历小程序

下面我们来写一个文件遍历的小程序,功能很简单,就是遍历一个文件夹中所有文件,并获取文件的完整路径。这样的小程序虽然简单,但是在我们今后的文件处理的编程非常有用。本程序主要用到的函数为join(path,filename)和walk(path)。函数walk(path)用于遍历path目录下的每个文件,jion(path,filename)用于将文件所在目录的路径与文件名连接起来得到文件的完整路径。代码如下:

[python] view plain copy

  1. import os
  2. for path,dir,filelist in os.walk(“testdir”):
  3.     for filename in filelist:
  4.         print(os.path.join(path,filename))

如上,第一个for循环:通过os.walk(“testdir”)获取遍历目录testdir的生成器对象,遍历生成器对象中的元组,元组中的元素分别为path(当前的遍历目录),dir(path下的目录列表),filelist(path下的文件列表);第二个for循环:遍历文件列表中的文件,并将文件所在目录文件名使用函数join(path,filename)连接起来组成文件的完整路径。

打印结果如下:

(3) Python中的常见异常及其处理

Python中的程序由于某些逻辑错误,可能会终止执行,这时系统会告知我们发生了何种错误,这个错误就是Python中的异常。在编写程序时,我们可以预知可能发生的异常,并处理这些异常。如在我们读取一个文件时,这个文件可能并不存在,这时程序就会报一个IOError的错误,这条错误信息就是IO异常。代码如下:

[python] view plain copy

  1. import os
  2. try:
  3.     f=open(“1.py”)
  4. except IOError:
  5.     print(“IOError”)

如上程序就是一个处理异常的结构,解释如下图:

                       关键字try中中包含可能会发生异常的代码块,except关键字后跟异常的类型, 并且包含处理异常的程序块。

代码打印结果如下:

如上,程序打开一个名为”1.py”的文件,但是项目路径下并没有这个文件,所以系统会抛出IOError这个异常,except包含IOError异常的模块,处理结果为打印”IOError”

(4)finally关键字与raise抛出异常。

在处理异常信息时,finally关键字是和try…except…搭配使用的,finally放在try…except…代码块后,无论是否会抛出异常,finally代码块中的程序都会执行,finally一般用于关闭资源等操作。

Python中使用raise TypeError(ErrorMessage)来抛出一个异常,当我们预知到程序中可能会抛出的异常时,可以使用raise关键字抛出一个异常来终止程序,ErrorMessage是我们可以自定义的异常信息。如下代码:

[python] view plain copy

  1. import os
  2. exits=0
  3. try:
  4.     f=open(“1.py”)
  5.     exits=1
  6. except IOError:
  7.     print(“IOError”)
  8. finally:
  9.     if exits==0:
  10.         raise TypeError(“file is not exits”)
  11.     else:
  12.         f.close()

 

如上程序,   首先我们定义了一个变量exits来标记文件是否存在,如果能打开文件exits=1,否则exits=0;在打开文件1.py时,如果文件不存在系统会抛出IOError,我们使用except关键字处理这个异常,如果捕获到这个异常,则打印”IOError”;最后使用finally关键字来关闭文件资源,如果exits=0,文件不存在,使用raise TypeError(ErrorMessage)来抛出一个异常,异常信息为”file is not exits”。程序中所打开的文件1.py并不存在,打印结果如下:

Python中还有很多其他的各种异常, 如TypeError表示传入的数据类型与期望的数据类型不符,keyError表示访问字典中的键不存在等等。更多的异常类型如下图:

以上就是我们介绍的有关异常和文件操作的内容,最近有点其他的事情,可能一段时间内不会更新博客了,有关Python我们在今后还有很多内容要介绍,比如mysql,mongodb与Redis,线程,进程以及协程,Python中的图形界面接口tkinter,面向对象编程等等内容,敬请期待。

未经允许不得转载:比尔云 » Python学习(23)–文件操作2与异常处理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

强烈推荐

高性能SSD云服务器ECS抗攻击,高可用云数据库RDS