python模块之os.path

63次阅读

共计 5270 个字符,预计需要花费 14 分钟才能阅读完成。

os.path.abspath(path)
返回 path 的绝对路径名
>>> os.path.abspath(“.”)
‘C:\\Users\\admin\\Desktop\\PycharmProjects\\python_demo’
os.path.basename(path)
返回文件名,等同于调用 os.path.split(path)返回值的第二个元素。
>>> os.path.basename(“/usr/bin/”)

>>> os.path.basename(“/usr/bin”)
‘bin’
python 的 basename 和 Unix shell 的 basename 指令是有区别的:
[root@localhost ~]# basename “/usr/bin”
bin
[root@localhost ~]# basename “/usr/bin/”
bin
os.path.commonpath(paths)
返回序列参数 paths 中最长的公共子路径。如果 paths 为空,或者同时包含绝对路径和相对路径,抛出 ValueError 异常。与 os.path.commonprefix(list)不同,此函数的返回值一定是一个有效路径。
>>> os.path.commonpath([“/home/admin”, “/home/admin/.ssh”])
‘/home/admin’
>>> os.path.commonpath([“/home/admin1”, “/home/admin2”])
‘/home’
os.path.commonprefix(list)
返回 list 中所有路径的最大长度的公共路径前缀,如果 list 为空返回空字符串。其返回值可能是一个无效路径。
>>> os.path.commonprefix([“.”, “/root”])

>>> os.path.commonprefix([“/home/admin1”, “/home/admin2”])
‘/home/admin’
os.path.dirname(path)
返回目录名,等同于调用 os.path.split(path)返回值的第一个元素。
>>> os.path.dirname(“/usr/bin/”)
‘/usr/bin’
>>> os.path.dirname(“/usr/bin”)
‘/usr’
os.path.exists(path)
判断 path 是否存在。如果 path 是一个已存在的路径或一个打开的文件描述符 (int),返回 True。在某些平台,即使 path 真实存在,但如果没有针对 path 执行 os.stat() 的权限,仍有可能返回 False。如果 path 是一个受到破坏的软链接(原始文件 / 文件夹被删除),返回 False。
os.path.lexists(path)
判断 path 是否存在。如果 path 是一个已存在的路径,返回 True。如果 path 是一个受到破坏的软链接(原始文件 / 文件夹被删除),返回 True。
os.path.expanduser(path)
返回把 path 中包含的 ”~” 和 ”~user” 转换成用户目录后的路径。
Unix 平台:对于 path 中的~,如果设置了环境变量 HOME,使用 HOME 的值替换;否则使用当前用户的用户主目录替换;对于 path 中的~user,直接使用 user 的用户主目录替换
>>> os.path.expanduser(“~/local/mysql”)
‘/root/local/mysql’
>>> os.path.expanduser(“~admin/local/mysql”)
‘/home/admin/local/mysql’
Windows 平台:对于 path 中的~,使用环境变量 HOME 或 USERPROFILE 的值,或 HOMEPATH 和 HOMEDRIVE 的值的组合替换;对于 path 中的~user,将替换 ”~” 的路径的最后一个目录组件剥离,使用 user 替换
# 查看环境变量
(python) D:\>echo %HOME%
%HOME%

(python) D:\>echo %USERPROFILE%
C:\Users\admin

(python) D:\>echo %HOMEPATH%
\Users\admin

(python) D:\>echo %HOMEDRIVE%
C:
>>> os.path.expanduser(“~\\local”)
‘C:\\Users\\admin\\local’

# 将 C:\\Users\\admin 中的 admin 替换为 anyuser
>>> os.path.expanduser(“~anyuser\\local”)
‘C:\\Users\\anyuser\\local’
如果扩展失败或 path 未以 ”~” 为前缀,不做改动直接返回。
os.path.expandvars(path)
扩展 path 中的环境变量并返回。path 中 $NAME 和 ${NAME}格式的子串将被对应的环境变量替换(不同平台存在是否区分大小写的问题)。格式错误或变量不存在,将直接返回。在 windows 中还包括 %NAME% 的形式。
os.path.getatime(path)
最后访问时间。返回值是自 epoch 时间算起的浮点值,单位为秒。如果 path 不存在或无法访问将抛出异常。
>>> getatime(“/root/demo.txt”)
1545345643.4549878
os.path.getmtime(path)
最后修改时间。返回值是自 epoch 时间算起的浮点值,单位为秒。如果 path 不存在或无法访问将抛出异常。
os.path.getctime(path)
在 Unix 系统,表示最近一次修改元数据的时间;在 Windows 系统,表示创建时间。返回值是自 epoch 时间算起的浮点值,单位为秒。如果 path 不存在或无法访问将抛出异常。
os.path.getsize(path)
以字节为单位返回路径大小。如果 path 不存在或无法访问将抛出异常。如果 path 指向一个文件夹,返回值不代表该文件夹真实占用的大小。
os.path.isabs(path)
判断是否为绝对路径。
os.path.isfile(path)
判断是否为文件。符号链接判定为 True,受到破坏判定为 False
[root@localhost ~]# ll
总用量 0
lrwxrwxrwx. 1 root root 8 12 月 21 07:32 demo.link -> demo.txt
-rw-r–r–. 1 root root 0 12 月 21 07:31 demo.txt
lrwxrwxrwx. 1 root root 10 12 月 21 07:32 sample.link -> sample.txt # 原文件被删除导致软链接受到破坏

>>> isfile(“/root/demo.link”)
True
>>> isfile(“/root/sample.link”)
False
os.path.isdir(path)
判断是否为文件夹。符号链接判定为 True,受到破坏判定为 False
os.path.islink(path)
判断是否为符号链接,即使是受到破坏的符号链接,也会返回 True。如果 Python 运行环境不支持符号链接,返回 False。
os.path.ismount(path)
判断是否为挂载点。
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用 % 挂载点
/dev/mapper/centos-root 18G 1.7G 16G 10% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 7.4M 485M 2% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/sda1 497M 157M 340M 32% /boot
tmpfs 99M 0 99M 0% /run/user/0

>>> ismount(“/dev”)
True
对于 Windows 系统,磁盘符根目录及 UNC 路径的共享目录总是挂载点:
>>> ismount(“c:/”)
True
>>> ismount(“//DESKTOP-BV17H6X/Users/”)
True
os.path.join(path, *paths)
路径拼接。将 path 与 paths 中的非空路径组件使用系统分隔符拼接。如果最后一个组件是空字符串,返回值将以分隔符结尾:
>>> join(“/root”, “a”, “b”, “”, “c”)
‘/root/a/b/c’

>>> join(“/root”, “a”, “b”, “c”, “”)
‘/root/a/b/c/’
如果 paths 中任意一个组件是绝对路径,将直接以该组件开始进行拼接:
>>> join(“/root”, “a”, “/b”, “c”)
‘/b/c’
在 Windows 中,如果 paths 中出现不含磁盘符的绝对路径,不会重置磁盘符:
>>> join(“c:/root”, “/foo”)
‘c:/foo’
如果 paths 中出现含磁盘符的,直接从该路径开始进行拼接:
>>> join(“c:/root”, “e:/root”, “/foo”)
‘e:/foo’
每个磁盘符有一个当前工作目录,下例表示相对于该磁盘当前工作目录的路径 foo(e:foo 而非 e:\\foo):
>>> os.path.abspath(join(“e:”, “foo”))
‘E:\\git_project\\foo’
os.path.normcase(path)
规范路径名大小写。在 Unix 和 Mac OS X 系统,直接返回 path;在大小写不敏感的系统(如 Windows),会将 path 转换为小写字母。此外 Windows 还会将 / 转换为 \\。
os.path.normpath(path)
规范路径名中的多余分隔符以及上级引用,如 A //B, A/B/, A/./B and A/foo/../ B 将全部转换为 A /B。Windows 系统还会将 / 转换为 \\。
os.path.realpath(path)
将包含符号链接的 path 转换为真实路径名称。
os.path.relpath(path, start=os.curdir)
返回相对于当前工作目录或指定的 start 目录的相对路径。
os.path.samefile(path1, path2)
判断 path1 和 path2 是否指向同一个文件或目录,取决于设备号和 i -node。如果调用 os.stat()失败将抛出异常。
os.path.sameopenfile(fp1, fp2)
判断文件描述符 fp1 和 fp2 是否指向同一个文件或目录。
os.path.samestat(stat1, stat2)
判断状态元组 stat1 和 stat2 是否指向同一个文件或目录,参数可能是 os.fstat()、os.lstat 或 os.stat()的返回值。
os.path.split(path)
将 path 拆分为 (head, tail) 的元组形式。tail 部分总是不包含斜杠,如果 path 以斜杠结尾,tail 将为空字符串;尾部的斜杠也会从 head 中去除,除非 path 是根路径:
>>> split(“/home/admin/.ssh/”)
(‘/home/admin/.ssh’, ”)

>>> split(“/”)
(‘/’, ”)
如果 path 不包含斜杠,head 部分将为空字符串:
>>> split(“home”)
(”, ‘home’)
如果 path 为空字符串,head 和 tail 都将为空:
>>> split(“”)
(”, ”)
os.path.splitdrive(path)
将 path 拆分为 (drive, tail) 的元组形式。在不使用磁盘符的系统,drive 总是为空字符串;在 Windows 系统,会将 path 分割为 UNC 共享点 / 磁盘驱动,及其相对路径。
# 包含磁盘符的路径
>>> splitdrive(“c:/dir”)
(‘c:’, ‘/dir’)

# UNC 路径,分割后的 drive 包含主机名和共享点(到第四个分隔符但不包括第四个)
>>> splitdrive(“//servername/sharename/directory/filename”)
(‘//servername/sharename’, ‘/directory/filename’)
os.path.splitext(path)
将 path 拆分为 (root, ext) 的元组形式。ext 为空字符串或者以. 打头且只包含 1 个. 的字符串:
>>> splitext(“/home/admin/.ssh/”)
(‘/home/admin/.ssh/’, ”)

>>> splitext(“/home/admin/.ssh/id_rsa.ppk”)
(‘/home/admin/.ssh/id_rsa’, ‘.ppk’)

# 如果 path 以 ’.’ 打头,ext 将为空字符串
>>> splitext(‘.cshrc’)
(‘.cshrc’, ”)
os.path.supports_unicode_filenames
判断是否能使用任意 Unicode 字符串作为文件名(在文件系统强加的限制内)

正文完
 0