胡琪

为今天工作,为明天投资,为未来孵化一些东西

python文件操作之目录和路径

在前面的几节中我们讲述了python文件操作,包括基本普通文件和zip压缩包文件,

在对文件操作过程中往往会对文件路径进行获取,如文件路径所在的目录,文件路径所在的一级目录,通过文件路径截取文件名,文件扩展名等。这就涉及到python中的os模块以及和文件路径相关的os.path模块。

os模块

我们首先来看os模块,官方文档地址在这:https://docs.python.org/2/library/os.html?highlight=os#module-os ,我们来看下os模块中在实际项目中会经常用到的重要的API

首先来看下和文件以及目录操作相关的函数。

os.mkdir(path[, mode])

该函数用数字模式mode创建一个名为path的目录,mode默认值为0777.如果文件已经存在将会抛出OSError,在windows上会抛出WindowsError: [Error 183] 该系统错误表示当文件已存在时,无法创建该文件。注意当传入的是层级结构的目录时要求前面的目录树都存在,否则会抛出OSError,在windows上会抛出WindowsError: [Error 3],表示系统找不到指定的路径,这也是os.mkdir和os.makedirs的不同点,以如下代码为例:

os.mkdir(path)会抛出异常,因为系统不存在C:\Users\hzhuqi\Deskto层级目录,os.mkdir(path2)可以正确执行,不会抛出异常,因为系统路径存在C:\Users\hzhuqi\Desktop层级目录

os.makedirs(path[, mode])

根据mode模式创建一个名为path的目录,如果path是一个层级目录树,则会创建每一级中间目录,即使该中间目录不存在(这是和mkdir不同的地方),如果层级目录树下的叶目录已经存在(注意是叶目录)则会抛出OSError。在windows上会抛出WindowsError: [Error 183] 该系统错误表示当文件已存在时,无法创建该文件。以如下代码为例:

os.makedirs(path)可以正确执行,即使中间层级目录Deskto不存在,也可以正确创建。os.makedirs(existed_path)会出现异常,如果existed_path在系统磁盘上已经存在的话。

os.remove(path)

删除path指向的文件,注意只能删除文件,如果path是目录,则会抛出异常,在windows上会出现WindowsError: [Error 5],表示拒绝访问

os.rmdir(path)

删除path所指向的目录,注意只能删除空的目录,如果path目录不为空,则会抛出异常,在windows上会出现WindowsError: [Error 2],系统找不到指定的文件

注意该函数只能删除目录,如果传入的path是文件则会抛出异常,在windows上会出现WindowsError: [Error 3],系统找不到指定的路径

os.removedirs(path)

删除path路径下的所有目录和子目录,传入的path参数需要是目录,不能是文件,否则会出现异常,传入的目录也要求是空目录,(os.removedirs(‘foo/bar/baz’) will first remove the directory ‘foo/bar/baz’, and then remove ‘foo/bar’ and ‘foo’ if they are empty),如果目录不为空,则会抛出异常,在windows上会出现WindowsError: [Error 145] ,表示目录不为空

和os.rmdir不同的是os.rmdir只会删除path指向的目录,但是removedirs会删除path路径上所有的层级目录,如果目录为空的话

 

os.path模块

os.path模块官方文档在这:https://docs.python.org/2/library/os.path.html?highlight=os.path#module-os.path,我们来看下os.path模块中在实际项目中会经常用到的重要的API

os.path.exists:exists(path)

用来判断文件或者路径在系统平台上是否存在,存在返回True,否则返回False。函数可以说是路径操作中使用频率最高的函数了,因为为了程序的健壮性,在对文件或者目录操作之前都需要先判断该文件或者目录是否存在。

os.path.dirname(path)

该函数返回的是path路径所在的目录的路径,注意返回的是目录的路径,而不是目录的名称,如以下代码:

则输出为C:\Users\hzhuqi\Desktop,输出是目录所在的路径,而不是目录名Desktop。但是很多时候我们需要根据路径path获取到其所在的目录名称,这个时候我们可以使用os.path.basename(path)函数

os.path.basename(path)

该函数返回的是path路径的基本名称,如果path指向的是文件,则返回该文件的文件名(包括扩展名),如果是目录返回该目录名(在Unix平台上返回‘’空字符串,详见python官方文档)。如以下代码:

那么前面说的根据文件名获取文件所在目录名就很容易解决了,我们可以连续调用两次该函数即可。

os.path.splitext(path)

该函数根据path路径以文件后缀分隔符.为界限返回一个二元组(root,ext),其中root+ext=path。使用该函数我们可以获取去掉了后缀名的文件名,如果path本身是以.开始则返回(path,”),如splitext(‘.txt’) 返回 (‘.txt’, ”),或者path本身指向的是一个目录而不是文件,如splitext(‘C:\Users\hzhuqi\Desktop’)返回(‘C:\\Users\\hzhuqi\\Desktop’, ”),注意当path指向的是一个文件的时候返回的二元组(root,ext)的第一个元祖root不是文件名,而是文件名所在的路径名,如以下代码:

输出是C:\Users\hzhuqi\Desktop\test而不是test,也就是说输出是文件名所在的路径,而不是文件名test,所以如果我们要根据path获取文件名的时候我们需要先获取其basename,然后使用splitext函数获取文件名。代码如下:

输出为去掉了后缀.txt的文件名test

os.path.join(path, *paths)

该函数也是使用频率非常高的一个函数,用来将多个path路径连接起来,在路径连接的时候建议使用该函数而不是使用字符串连接方式,如path+os.sep+’path2′

 

 

注:本文首次发表于45.76.208.179,谢绝转载,如需转载,请注明出处:45.76.208.179

 

扫描下方二维码实时接收最新技术干货推送

《python文件操作之目录和路径》

扫描二维码实时接收最新技术干货推送,而且会不定期的发布互联网名企内推机会哦!

打赏

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注