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

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

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

这一节我们将会继续介绍有关文件操作的内容,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,面向对象编程等等内容,敬请期待。

原文地址http://www.bieryun.com/2375.html

相关文章
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
415 1
|
6月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
551 1
|
6月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1108 1
|
11月前
|
安全 数据安全/隐私保护 Python
Python学习的自我理解和想法(27)
本文记录了学习Python第27天的内容,主要介绍了使用Python操作PPTX和PDF的技巧。其中包括通过`python-pptx`库创建PPTX文件的详细步骤,如创建幻灯片对象、选择母版布局、编辑标题与副标题、添加文本框和图片,以及保存文件。此外,还讲解了如何利用`PyPDF2`库为PDF文件加密,涵盖安装库、定义函数、读取文件、设置密码及保存加密文件的过程。文章总结了Python在处理文档时的强大功能,并表达了对读者应用这些技能的期待。
|
9月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
336 72
|
6月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
293 4
|
7月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
9月前
|
算法 IDE 测试技术
python学习需要注意的事项
python学习需要注意的事项
422 57
|
9月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。