os.path
模块用于常用路径操作,本篇文章以 windows
系统作为示例
os.path模块方法
路径返回
返回绝对路径
abspath(path)
1 2 3
| from os import path
print(path.abspath('雨园'))
|
返回基本名称
basename(path)
- 这是将 path 传入函数 split() 之后,返回的一对值中的第二个元素
1 2 3 4
| from os import path
print(path.basename('a/b')) print(path.basename('a/b/'))
|
返回最长公共子路径
commonpath(paths)
- 如果 paths 同时包含绝对路径和相对路径,或 paths 在不同的驱动器上,或 paths 为空,则抛出 ValueError 异常
1 2 3
| from os import path
print(path.commonpath(['a/b/c', 'a/b/cc']))
|
返回最长公共前缀
commonprefix(list)
- 如果 list 为空,则返回空字符串
- 此函数是逐字符比较,因此可能返回无效路径。要获取有效路径,使用 commonpath()
1 2 3 4
| from os import path
print(path.commonprefix([])) print(path.commonprefix(['/usr/lib', '/usr/local/lib']))
|
返回目录名称
dirname(path)
- 返回路径 path 的目录名称
- 这是将 path 传入函数 split() 之后,返回的一对值中的第一个元素
1 2 3 4 5 6 7
| from os import path
print(path.dirname('')) print(path.dirname('a')) print(path.dirname('/a')) print(path.dirname('a/b')) print(path.dirname('a/b/'))
|
返回指定文件路径
realpath(path)
- 返回指定文件的规范路径,消除路径中存在的任何符号链接(如果操作系统支持)
1 2 3
| from os import path
print(path.realpath(r'./b\c\\d/./e.txt'))
|
返回相对文件路径
relpath(path, start=os.curdir)
- 返回从当前目录或可选的 start 目录至 path 的相对文件路径
路径替换
替换为家目录
expanduser(path)
- 将 path 中开头部分的
~
或 ~user
替换为当前用户的家目录并返回
- 如果展开路径失败,或者路径不是以波浪号开头,则路径将保持不变
1 2 3 4
| from os import path
print(path.expanduser('~\\a')) print(path.expanduser('~yu\\a'))
|
1 2
| C:\Users\yu\a C:\Users\yu\a
|
替换为环境变量的值
expandvars(path)
- 输入带有环境变量的路径作为参数,返回展开变量以后的路径
$name
${name}
形式的子字符串被环境变量 name 的值替换,windows还可以展开 %name%
- 格式错误的变量名称和对不存在变量的引用保持不变
1 2 3 4 5
| from os import path
print(path.expandvars('$USERNAME')) print(path.expandvars('${USERNAME}')) print(path.expandvars('%USERNAME%'))
|
路径信息
最后访问时间
getatime(path)
1 2 3
| from os import path
print(path.getatime('./yu.txt'))
|
最后修改时间
getmtime(path)
1 2 3
| from os import path
print(path.getmtime('./yu.txt'))
|
最近创建时间
getctime(path)
- 返回值是一个浮点数,为纪元秒数
- 在Windows上,它是 path 的创建时间
1 2 3
| from os import path
print(path.getctime('./yu.txt'))
|
文件大小
getsize(path)
1 2 3
| from os import path
print(path.getsize('./yu.txt'))
|
路径判断
是否绝对路径
isabs(path)
- 如果 path 是一个绝对路径,则返回 True
- 在 Unix 上,它就是以斜杠开头,而在 Windows 上,它可以是去掉驱动器号后以斜杠(或反斜杠)开头。
1 2 3 4 5 6
| from os import path
print(path.isabs('/a')) print(path.isabs(r'\a')) print(path.isabs('\\a')) print(path.isabs('a/'))
|
是否文件
isfile(path)
1 2 3 4
| from os import path
print(path.isfile('./a.txt')) print(path.isfile('./b.txt'))
|
是否目录
isdir(path)
1 2 3 4
| from os import path
print(path.isdir('./a')) print(path.isdir('./b'))
|
是否符号链接
islink(path)
- 如果 path 指向的存在目录条目是一个符号链接,则返回 True
- 如果 Python 运行时不支持符号链接,则总是返回 False
是否挂载点
ismount(path)
- 如果路径 path 是 挂载点 (文件系统中挂载其他文件系统的点),则返回 True
是否指向相同文件或目录
samefile(path1, path2)
- 如果两个路径都指向相同的文件或目录,则返回 True
文件描述符是否指向相同文件
sameopenfile(fp1, fp2)
- 如果文件描述符 fp1 和 fp2 指向相同文件,则返回 True
状态元组是否指向相同文件
samestat(stat1, stat2)
- 如果 stat 元组 stat1 和 stat2 指向相同文件,则返回 True
- stat 元组可能是由
os.fstat()
、os.lstat()
或 os.stat()
返回的
路径是否存在
exists(path)
- 如果 path 指向一个已存在的路径或已打开的文件描述符,返回 True
- 对于失效的符号链接(路径不存在),返回 False
1 2 3 4
| from os import path
print(path.exists('./b')) print(path.exists('a/b'))
|
lexists(path)
- 如果 path 指向一个已存在的路径,返回 True
- 对于失效的符号链接(路径损坏),也返回 True
1 2 3 4
| from os import path
print(path.lexists('./b')) print(path.lexists('a/b'))
|
路径拼接
join(path, *paths)
1 2 3
| from os import path
print(path.normcase(r'.\B'))
|
路径规范
规范路径的大小写
normcase(path)
- 在 Windows 上,将路径中的所有字符都转换为小写,并将正斜杠转换为反斜杠。在其他操作系统上返回原路径
1 2 3
| from os import path
print(path.normcase(r'.\B'))
|
标准化路径名
normpath(path)
- 在 Windows 上,本方法将正斜杠转换为反斜杠
1 2 3
| from os import path
print(path.normpath(r'./b\c\\d/./e'))
|
路径拆分
拆分为 (head, tail)
split(path)
- 将路径 path 拆分为两元组
(head, tail)
,其中,tail 是路径的最后一部分,而 head 是除最后部分外的所有内容
- 如果 path 以斜杠结尾,则 tail 将为空
- 如果 path 中没有斜杠,head 将为空
- 如果 path 为空,则 head 和 tail 均为空
- head 末尾的斜杠会被去掉,除非它是根目录(即它仅包含一个或多个斜杠)
1 2 3 4 5 6 7
| from os import path
print(path.split('')) print(path.split('a')) print(path.split('/a')) print(path.split('a/b')) print(path.split('a/b/'))
|
1 2 3 4 5
| ('', '') ('', 'a') ('/', 'a') ('a', 'b') ('a/b', '')
|
拆分为 (drive, tail)
splitdrive(path)
- 将路径 path 拆分为两元组
(drive, tail)
,其中 drive 是挂载点或空字符串
- 在没有驱动器概念的系统上,drive 将始终为空字符串
- 在所有情况下,
drive + tail
都与 path 相同
- 在 Windows 上,本方法将路径拆分为驱动器/UNC 根节点和相对路径
1 2 3
| from os import path
print(path.splitdrive(r'C:\a\b'))
|
拆分为 (root, ext)
splitext(path)
- 将路径 path 拆分为两元组
(root, ext)
,使 root + ext == path
- 其中 ext 为空或以英文句点开头,且最多包含一个句点
- 路径前的句点将被忽略
1 2 3 4 5
| from os import path
print(path.splitext('/a')) print(path.splitext('.a')) print(path.splitext('./a'))
|
1 2 3
| ('/a', '') ('.a', '') ('./a', '')
|
将 Unicode 字符串用作文件名
supports_unicode_filenames
- 如果(在文件系统限制下)允许将任意 Unicode 字符串用作文件名,则为 True
参考资料