资讯专栏INFORMATION COLUMN

python模块之os.path

mrli2016 / 1327人阅读

摘要:返回的绝对路径名返回文件名,等同于调用返回值的第二个元素。与不同,此函数的返回值一定是一个有效路径。返回值是自时间算起的浮点值,单位为秒。规范路径名中的多余分隔符以及上级引用,如将全部转换为。

os.path.abspath(path)

返回path的绝对路径名

>>> os.path.abspath(".")
"C:UsersadminDesktopPycharmProjectspython_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中的~,使用环境变量HOMEUSERPROFILE的值,或HOMEPATHHOMEDRIVE的值的组合替换;
对于path中的~user,将替换"~"的路径的最后一个目录组件剥离,使用user替换

# 查看环境变量
(python) D:>echo %HOME%
%HOME%

(python) D:>echo %USERPROFILE%
C:Usersadmin

(python) D:>echo %HOMEPATH%
Usersadmin

(python) D:>echo %HOMEDRIVE%
C:
>>> os.path.expanduser("~local")
"C:Usersadminlocal"

# 将C:Usersadmin中的admin替换为anyuser
>>> os.path.expanduser("~anyuserlocal")
"C:Usersanyuserlocal"

如果扩展失败或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_projectfoo"
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.lstatos.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字符串作为文件名(在文件系统强加的限制内)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42849.html

相关文章

  • python基础删除文件及删除目录的方法

    摘要:下面为大家分享一篇实现删除某路径下文件及文件夹的实例讲解,具有很好的参考价值,希望对大家有所帮助。类似于高级,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好。附模块库的使用有关文件夹与文件的查找,删除等功能在模块中实现。下面为大家分享一篇Python 实现删除某路径下文件及文件夹的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧Python 实现删除某路径下文件及...

    animabear 评论0 收藏0
  • python基础删除文件及删除目录的方法

    摘要:下面为大家分享一篇实现删除某路径下文件及文件夹的实例讲解,具有很好的参考价值,希望对大家有所帮助。类似于高级,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好。附模块库的使用有关文件夹与文件的查找,删除等功能在模块中实现。下面为大家分享一篇Python 实现删除某路径下文件及文件夹的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧Python 实现删除某路径下文件及...

    nanfeiyan 评论0 收藏0
  • Python文件及目录操作

    摘要:报告这错误后,继续或者抛出终止。调用方式当前遍历的目录目录下的目录列表目录下的文件列表在进行文件内指针重置的时候,除了基础篇文件部分介绍的绝对定位外,通过模块还可以实现相对定位。 Python的目录操作主要依赖于os和 shutil 模块. Python目录操作 新建目录 os.mkdir(./test/) #在当前目录下新建名为test的目录,存在则报错 新建多级目录 os.make...

    dkzwm 评论0 收藏0
  • pythonos模块操作文件与文件夹

    摘要:目录操作文件与文件夹操作文件与文件夹案例批量修改文件名案例批量修改文件名模块是标准库中的一个用于访问操作系统功能的模块。 目录 OS操作文件与文件夹 案例—批量修改文件名 OS模块是Python标准库中的一个用于访问操作系统功能的模块。使用OS模块中提供的接口,可以实现跨平台访...

    番茄西红柿 评论0 收藏2637
  • Python合并PDF文件

    摘要:在日常的学习生活工作中,我们有时会遇到需要合并文件的需求。模块的相关参考文档网址为本文将介绍如何利用来完成文件的合并。   在日常的学习生活工作中,我们有时会遇到需要合并PDF文件的需求。这时,我们可以利用相关的PDF软件(如Adobe Acrobat Reader DC)来完成这个任务,幸运的是,Python也为我们提供了这方面的处理模块PyPDF2, 借用它,我们可以利用Pytho...

    maxmin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<