os.path
库主要针对路径、文件名和目录名进行信息获取、信息整理、判断等等。共计 29
个函数和一个属性,将分成两部分介绍,第一部分只介绍比较常用的函数与唯一的属性,第二部分介绍较冷门的函数。
- 系统类型:
CentOS 8.2
- python 版本:
Python 3.6.8
唯一的属性
os.path.supports_unicode_filenames
在当前文件系统中,若允许使用任意 Unicode
字符串作为文件名,那么返回 True
,否则返回 False
import os # 在本文之后的代码段中,此行将省略
print(os.path.supports_unicode_filenames)
#True
分离路径与名称
os.path.dirname(path)
返回 参数路径
的路径部分,若 参数路径
指向一个文件,则返回文件所在的目录路径; 若 参数路径
指向一个目录,则返回此目录上层目录的路径。
- 参数
path
– 类路径对象,可以是表示路径的str
或bytes
对象,还可以是实现了os.PathLike
协议的对象
- 返回值
str
,目录路径,特殊情况下为空字符串
print(os.path.dirname('/project/test/test.py')) # 指定到文件,绝对路径
#'/project/test'
print(os.path.dirname('/project/test/')) # 指定到目录内,绝对路径
#'/project/test'
print(os.path.dirname('/project/test')) # 指定到目录上,绝对路径
#'/project'
print(os.path.dirname('./test.py')) # 指定到文件,相对路径
#'.'
print(os.path.dirname('./')) # 指定到目录,相对路径
#'.'
测试完示例之后就会发现,此函数就是以 参数路径
中最后一个 \
或 /
为标识截取的字符串。
os.path.basename(path)
返回 参数路径
的基本文件名称,若 参数路径
指向一个文件,则返回文件名; 若 参数路径
指向一个目录,则返回最后一层目录名。
- 参数
path
– 类路径对象,可以是表示路径的str
或bytes
对象,还可以是实现了os.PathLike
协议的对象
- 返回值
str
,文件或目录名称. 特殊情况下为空字符串
print(os.path.basename('/project/test/test.py')) # path 是一个文件(绝对路径)
#'test.py'
print(os.path.basename('/project/test/')) # path 是一个目录,但路径后添加了 '\', 也就是说 path 指向的是目录内部
#''
print(os.path.basename('/project/test')) # path 是一个目录(绝对路径)
#'test'
print(os.path.basename('./test.py')) # path 是一个文件(相对路径)
#'test.py'
print(os.path.basename('./')) # path 是执行目录(相对路径)
#''
print(os.path.basename('/project/test/tes.py')) # 指向一个无效文件名
#'tes.py'
此函数可以获取路径中的目录名或者文件名,但是当路径指向目录内部并且没有指定目录内文件时,此函数将返回一个空字符串.
os.path.split(path)
将 参数路径
拆分为两部分,组合成一个元组,即 (目录, 文件名)
- 参数
path
– 类路径对象,可以是表示路径的str
或bytes
对象,还可以是实现了os.PathLike
协议的对象
- 返回值
tuple
–(目录, 文件名)
其实此函数得到的结果相当于 dirname()
函数和 basename()
函数的组合:
print(os.path.split('/project/test/test.py'))
#('/project/test', 'test.py')
print((os.path.dirname('/project/test/test.py'), os.path.basename('/project/test/test.py')))
#('/project/test', 'test.py')
测试到这里,小编就感觉这三个函数不会就是用的截取字符串函数吧,然后小编就打开了源码,好家伙,直接好家伙,来看一眼 dirname()
函数的源代码:
# 备注内容都是小编自己加的
def dirname(p):
"""Returns the directory component of a pathname"""
p = os.fspath(p) # 可以先理解为传什么返回什么
sep = _get_sep(p) # 返回二进制的 '/' 或者普通的 '/'
i = p.rfind(sep) + 1 # 找到最后一个 '/'
head = p[