​os.path --- 常用路径操作​

news2024/12/22 10:09:16

源代码: Lib/posixpath.py (用于 POSIX) 和 Lib/ntpath.py (用于 Windows)。


此模块实现了一些有用的路径名称相关函数。 要读取或写入文件请参见 open(),对于访问文件系统请参阅 os 模块。 传给 path 形参的可以是字符串、字节串或者任何实现了 os.PathLike 协议的对象。

与 Unix 不同,Python 不会执行任何 自动 路径扩展。 当应用程序需要类似 shell 的路径扩展时,可以显式地发起调用 expanduser() 和 expandvars() 这样的函数。 (另请参阅 glob 模块。)

参见

pathlib 模块提供高级路径对象。

备注

所有这些函数都仅接受字节或字符串对象作为其参数。如果返回路径或文件名,则结果是相同类型的对象。

备注

由于不同的操作系统具有不同的路径名称约定,因此标准库中有此模块的几个版本。os.path 模块始终是适合 Python 运行的操作系统的路径模块,因此可用于本地路径。但是,如果操作的路径 总是 以一种不同的格式显示,那么也可以分别导入和使用各个模块。它们都具有相同的接口:

  • posixpath 用于Unix 样式的路径

  • ntpath 用于 Windows 路径

在 3.8 版更改: exists()、lexists()、isdir()、isfile()、islink() 和 ismount() 现在遇到系统层面上不可表示的字符或字节的路径时,会返回 False,而不是抛出异常。

os.path.abspath(path)

返回路径 path 的绝对路径(标准化的)。在大多数平台上,这等同于用 normpath(join(os.getcwd(), path)) 的方式调用 normpath() 函数。

在 3.6 版更改: 接受一个 path-like object。

os.path.basename(path)

返回路径 path 的基本名称。这是将 path 传入函数 split() 之后,返回的一对值中的第二个元素。请注意,此函数的结果与Unix basename 程序不同。basename 在 '/foo/bar/' 上返回 'bar',而 basename() 函数返回一个空字符串 ('')。

在 3.6 版更改: 接受一个 path-like object。

os.path.commonpath(paths)

接受包含多个路径的序列 paths,返回 paths 的最长公共子路径。如果 paths 同时包含绝对路径和相对路径,或 paths 在不同的驱动器上,或 paths 为空,则抛出 ValueError 异常。与 commonprefix() 不同,本方法返回有效路径。

可用性: Unix, Windows。

3.5 新版功能.

在 3.6 版更改: 接受一个 类路径对象 序列。

os.path.commonprefix(list)

接受包含多个路径的 列表,返回所有路径的最长公共前缀(逐字符比较)。如果 列表 为空,则返回空字符串 ('')。

备注

此函数是逐字符比较,因此可能返回无效路径。要获取有效路径,参见 commonpath()。

>>>

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

在 3.6 版更改: 接受一个 path-like object。

os.path.dirname(path)

返回路径 path 的目录名称。这是将 path 传入函数 split() 之后,返回的一对值中的第一个元素。

在 3.6 版更改: 接受一个 path-like object。

os.path.exists(path)

如果 path 指向一个已存在的路径或已打开的文件描述符,返回 True。对于失效的符号链接,返回 False。在某些平台上,如果使用 os.stat() 查询到目标文件没有执行权限,即使 path 确实存在,本函数也可能返回 False

在 3.3 版更改: path 现在可以是一个整数:如果该整数是一个已打开的文件描述符,返回 True,否则返回 False

在 3.6 版更改: 接受一个 path-like object。

os.path.lexists(path)

如果 path 指向一个已存在的路径,返回 True。对于失效的符号链接,也返回 True。在缺失 os.lstat() 的平台上等同于 exists()。

在 3.6 版更改: 接受一个 path-like object。

os.path.expanduser(path)

在 Unix 和 Windows 上,将参数中开头部分的 ~ 或 ~user 替换为当前 用户 的家目录并返回。

在 Unix 上,开头的 ~ 会被环境变量 HOME 代替,如果变量未设置,则通过内置模块 pwd 在 password 目录中查找当前用户的主目录。以 ~user 开头则直接在 password 目录中查找。

在 Windows 上,如果 USERPROFILE 已设置将会被使用,否则 HOMEPATH 和 HOMEDRIVE 将被组合起来使用。 初始的 ~user 会通过检查当前用户的家目录中匹配 USERNAME 的最后一部分目录名并执行替换来处理。

如果展开路径失败,或者路径不是以波浪号开头,则路径将保持不变。

在 3.6 版更改: 接受一个 path-like object。

在 3.8 版更改: Windows 不再使用 HOME

os.path.expandvars(path)

输入带有环境变量的路径作为参数,返回展开变量以后的路径。$name 或 ${name} 形式的子字符串被环境变量 name 的值替换。格式错误的变量名称和对不存在变量的引用保持不变。

在 Windows 上,除了 $name 和 ${name} 外,还可以展开 %name%

在 3.6 版更改: 接受一个 path-like object。

os.path.getatime(path)

返回 path 的最后访问时间。返回值是一个浮点数,为纪元秒数(参见 time 模块)。如果该文件不存在或不可访问,则抛出 OSError 异常。

os.path.getmtime(path)

返回 path 的最后修改时间。返回值是一个浮点数,为纪元秒数(参见 time 模块)。如果该文件不存在或不可访问,则抛出 OSError 异常。

在 3.6 版更改: 接受一个 path-like object。

os.path.getctime(path)

返回 path 在系统中的 ctime,在有些系统(比如 Unix)上,它是元数据的最后修改时间,其他系统(比如 Windows)上,它是 path 的创建时间。返回值是一个数,为纪元秒数(参见 time 模块)。如果该文件不存在或不可访问,则抛出 OSError 异常。

在 3.6 版更改: 接受一个 path-like object。

os.path.getsize(path)

返回 path 的大小,以字节为单位。如果该文件不存在或不可访问,则抛出 OSError 异常。

在 3.6 版更改: 接受一个 path-like object。

os.path.isabs(path)

如果 path 是一个绝对路径,则返回 True。在 Unix 上,它就是以斜杠开头,而在 Windows 上,它可以是去掉驱动器号后以斜杠(或反斜杠)开头。

在 3.6 版更改: 接受一个 path-like object。

os.path.isfile(path)

如果 path 是 现有的 常规文件,则返回 True。本方法会跟踪符号链接,因此,对于同一路径,islink() 和 isfile() 都可能为 True

在 3.6 版更改: 接受一个 path-like object。

os.path.isdir(path)

如果 path 是 现有的 目录,则返回 True。本方法会跟踪符号链接,因此,对于同一路径,islink() 和 isdir() 都可能为 True

在 3.6 版更改: 接受一个 path-like object。

os.path.isjunction(path)

Return True 如果 path 指向的 现有 目录条目是一个连接点。 则当连接点在当前平台不受支持时将总是返回 False

3.12 新版功能.

os.path.islink(path)

如果 path 指向的 现有 目录条目是一个符号链接,则返回 True。如果 Python 运行时不支持符号链接,则总是返回 False

在 3.6 版更改: 接受一个 path-like object。

os.path.ismount(path)

如果路径 path 是 挂载点 (文件系统中挂载其他文件系统的点),则返回 True。在 POSIX 上,该函数检查 path 的父目录 path/.. 是否在与 path 不同的设备上,或者 path/.. 和 path 是否指向同一设备上的同一 inode(这一检测挂载点的方法适用于所有 Unix 和 POSIX 变体)。本方法不能可靠地检测同一文件系统上的绑定挂载 (bind mount)。在 Windows 上,盘符和共享 UNC 始终是挂载点,对于任何其他路径,将调用 GetVolumePathName 来查看它是否与输入的路径不同。

3.4 新版功能: 支持在 Windows 上检测非根挂载点。

在 3.6 版更改: 接受一个 path-like object。

os.path.isdevdrive(path)

如果路径名 path 位于一个 Windows Dev 驱动器则返回 True。 Dev Drive 针对开发者场景进行了优化,并为读写文件提供更快的性能。 推荐用于源代码、临时构建目录、包缓存以及其他的 IO 密集型操作。

对于无效的路径可能引发错误,例如,没有可识别的驱动器的路径,但在不支持 Dev 驱动器的平台上将返回 False。 请参阅 Windows 文档 了解有关启用并创建 Dev 驱动器的信息。

可用性: Windows。

3.12 新版功能.

os.path.join(path*paths)

智能地合并一个或多个路径部分。 返回值将是 path 和所有 *paths 成员的拼接,其中每个非空部分后面都紧跟一个目录分隔符,最后一个除外。 也就是说,如果最后一个部分为空或是以一个分隔符结束则结果将仅以一个分隔符结束。 如果某个部分为绝对路径(在 Windows 上需要同时有驱动器号和根路径符号),则之前的所有部分会被忽略并从该绝对路径部分开始拼接。

在 Windows,当遇到绝对路径部分 (如 r'\foo') 时驱动器号将不会被重置。 如果某个部分位于不同驱动器或为绝对路径,则之前的所有部分会被忽略并且该驱动器号会被重置。 请注意由于每个驱动器都有一个当前目录,因此 os.path.join("c:", "foo") 是代表驱动器 C: 上当前路径的相对路径 (c:foo),而不是 c:\foo

在 3.6 版更改: 接受一个 类路径对象 用于 path 和 paths 。

os.path.normcase(path)

规范路径的大小写。在 Windows 上,将路径中的所有字符都转换为小写,并将正斜杠转换为反斜杠。在其他操作系统上返回原路径。

在 3.6 版更改: 接受一个 path-like object。

os.path.normpath(path)

通过折叠多余的分隔符和对上级目录的引用来标准化路径名,所以 A//BA/B/A/./B 和 A/foo/../B 都会转换成 A/B。这个字符串操作可能会改变带有符号链接的路径的含义。在 Windows 上,本方法将正斜杠转换为反斜杠。要规范大小写,请使用 normcase()。

备注

在 POSIX 系统上,根据 IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution,如果一个路径名称以两个斜杠开始,则开始字符之后的第一个部分将以具体实现所定义的方式来解读,但是超过两个开始字符则将被视为单个字符。

在 3.6 版更改: 接受一个 path-like object。

os.path.realpath(path*strict=False)

返回指定文件的规范路径,消除路径中存在的任何符号链接(如果操作系统支持)。

如果一个路径不存在或是遇到了符号链接循环,并且 strict 为 True,则会引发 OSError。 如果 strict 为 False,则会尽可能地解析路径并添加结果而不检查路径是否存在。

备注

这个函数会模拟操作系统生成规范路径的过程,Windows 与 UNIX 的这个过程在处理链接和后续路径组成部分的交互方式上有所差异。

操作系统 API 会根据需要来规范化路径,因此通常不需要调用此函数。

在 3.6 版更改: 接受一个 path-like object。

在 3.8 版更改: 在 Windows 上现在可以正确解析符号链接和交接点 (junction point)。

在 3.10 版更改: 增加了 strict 形参。

os.path.relpath(pathstart=os.curdir)

返回从当前目录或可选的 start 目录至 path 的相对文件路径。 这只是一个路径计算:不会访问文件系统来确认 path 或 start 是否存在或其性质。 在 Windows 上,当 path 和 start 位于不同驱动器时将引发 ValueError。

start 默认为 os.curdir。

可用性: Unix, Windows。

在 3.6 版更改: 接受一个 path-like object。

os.path.samefile(path1path2)

如果两个路径都指向相同的文件或目录,则返回 True。这由设备号和 inode 号确定,在任一路径上调用 os.stat() 失败则抛出异常。

可用性: Unix, Windows。

在 3.2 版更改: 添加了对 Windows 的支持。

在 3.4 版更改: Windows现在使用与其他所有平台相同的实现。

在 3.6 版更改: 接受一个 path-like object。

os.path.sameopenfile(fp1fp2)

如果文件描述符 fp1 和 fp2 指向相同文件,则返回 True

可用性: Unix, Windows。

在 3.2 版更改: 添加了对 Windows 的支持。

在 3.6 版更改: 接受一个 path-like object。

os.path.samestat(stat1stat2)

如果 stat 元组 stat1 和 stat2 指向相同文件,则返回 True。这些 stat 元组可能是由 os.fstat()、os.lstat() 或 os.stat() 返回的。本函数实现了 samefile() 和 sameopenfile() 底层所使用的比较过程。

可用性: Unix, Windows。

在 3.4 版更改: 添加了对 Windows 的支持。

在 3.6 版更改: 接受一个 path-like object。

os.path.split(path)

将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。tail 部分不会包含斜杠,如果 path 以斜杠结尾,则 tail 将为空。如果 path 中没有斜杠,head 将为空。如果 path 为空,则 head 和 tail 均为空。head 末尾的斜杠会被去掉,除非它是根目录(即它仅包含一个或多个斜杠)。在所有情况下,join(head, tail) 指向的位置都与 path 相同(但字符串可能不同)。另请参见函数 dirname() 和 basename()。

在 3.6 版更改: 接受一个 path-like object。

os.path.splitdrive(path)

将路径 path 拆分为一对,即 (drive, tail),其中 drive 是挂载点或空字符串。在没有驱动器概念的系统上,drive 将始终为空字符串。在所有情况下,drive + tail 都与 path 相同。

在 Windows 上,本方法将路径拆分为驱动器/UNC 根节点和相对路径。

如果路径 path 包含盘符,则 drive 将包含冒号之前的所有内容包括冒号本身:

>>>

>>> splitdrive("c:/dir")
("c:", "/dir")

如果路径包含 UNC 路径,则 drive 将包含主机名和 share:

>>>

>>> splitdrive("//host/computer/dir")
("//host/computer", "/dir")

在 3.6 版更改: 接受一个 path-like object。

os.path.splitroot(path)

将路径名 path 拆分为一个 3 元组 (drive, root, tail) 其中 drive 是设置名或挂载点,root 是表示 drive 之后的分隔符的字符串,而 tail 则为 root 之后的所有内容。 这此条目均可以为空字符串。 在所有情况下,drive + root + tail 都与 path 相同。

在 POSIX 系统上,drive 将总是为空。 root 可能为空(如果 path 是相对路径)、单个正斜杠(如果 path 是绝对路径)、或两个正斜杠(由基于 IEEE Std 1003.1-2017; 4.13 Pathname Resolution 的具体实现来定义。) 例如:

>>>

>>> splitroot('/home/sam')
('', '/', 'home/sam')
>>> splitroot('//home/sam')
('', '//', 'home/sam')
>>> splitroot('///home/sam')
('', '/', '//home/sam')

在 Windows 上,drive 可能为空、以字母表示的驱动器名称、UNC share 或是设备名称。 root 可能为空、单个正斜杠,或单个反斜杠。 例如:

>>>

>>> splitroot('C:/Users/Sam')
('C:', '/', 'Users/Sam')
>>> splitroot('//Server/Share/Users/Sam')
('//Server/Share', '/', 'Users/Sam')

3.12 新版功能.

os.path.splitext(path)

将路径名称 path 拆分为 (root, ext) 对使得 root + ext == path,并且扩展名 ext 为空或以句点打头并最多只包含一个句点。

如果路径 path 不包含扩展名,则 ext 将为 '':

>>>

>>> splitext('bar')
('bar', '')

如果路径 path 包含扩展名,则 ext 将被设为该扩展名,包括打头的句点。 请注意在其之前的句点将被忽略:

>>>

>>> splitext('foo.bar.exe')
('foo.bar', '.exe')
>>> splitext('/foo/bar.exe')
('/foo/bar', '.exe')

path 中最后一部分如果以点号开头则会被视为 root 的一部分:

>>>

>>> splitext('.cshrc')
('.cshrc', '')
>>> splitext('/foo/....jpg')
('/foo/....jpg', '')

在 3.6 版更改: 接受一个 path-like object。

os.path.supports_unicode_filenames

如果(在文件系统限制下)允许将任意 Unicode 字符串用作文件名,则为 True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1302531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java王者荣耀火柴人

主要功能 键盘W,A,S,D键:控制玩家上下左右移动。按钮一:控制英雄发射一个矩形攻击红方小兵。按钮控制英雄发射魅惑技能,伤害小兵并让小兵停止移动。技能三:攻击多个敌人并让小兵停止移动。普攻:对小兵造成基础伤害。小…

【人工智能 | 知识表示】问题规约法 谓词/符号逻辑,良好的知识表示是解题的关键!(笔记总结系列)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

【算法优选】 动态规划之路径问题——贰

文章目录 🎋前言🌲[下降最小路径和](https://leetcode.cn/problems/minimum-path-sum/)🚩题目描述🚩算法思路:🚩代码实现 🎍[最小路径和](https://leetcode.cn/problems/minimum-path-sum/)&…

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…

计算机科学与技术认识实习【报告】

一、实习目的 此次认识实习主要面对计算机科学与技术专业的同学&#xff0c;了解专业在未来的发展趋势&#xff0c;通过观看公司的介绍视频和技术发展情况招聘信息后的感想和学习体会等多种方式&#xff0c;使我们了解本专业相关领域的发展现状&#xff0c;让我们在校园内课堂上…

(纯原创)基于JavaWeb的宠物领养商城(详细源码以及开发设计报告)

摘要 本宠物领养系统以MVC分层为原则&#xff0c;数据持久化使用Mybatis&#xff0c;数据库使用MySQL&#xff0c;这些技术目前相对比较成熟&#xff0c;方便系统的维护与扩展 商城系统包括了宠物领养、用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能…

Java LeetCode篇-二叉树经典解法(实现:判断平衡二叉树、找两个节点最近的祖先等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 平衡二叉树 1.1 实现判断平衡二叉树的思路 1.2 代码实现判断平衡二叉树 2.0 二叉树的层序遍历 2.1 实现二叉树层序遍历的思路 2.2 代码实现二叉树层序遍历 3.0 …

【C语言】【数据结构】自定义类型:结构体

引言 这是一篇对结构体的详细介绍&#xff0c;这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&am…

Linux安装Nginx并部署Vue项目

今天部署了一个Vue项目到阿里云的云服务器上&#xff0c;现记录该过程。 1. 修改Vue项目配置 我们去项目中发送axios请求的文件里更改一下后端的接口路由&#xff1a; 2. 执行命令打包 npm run build ### 或者 yarn build 打包成功之后&#xff0c;我们会看到一个dist包&a…

中文语音标注工具FunASR(语音识别)

全称 A Fundamental End-to-End Speech Recognition Toolkit&#xff08;一个语音识别工具&#xff09; 可能大家用过whisper&#xff08;openAi&#xff09;&#xff0c;它【标注英语的确很完美】&#xff0c;【但中文会出现标注错误】或搞了个没说的词替换上去&#xff0c;所…

万户协同办公平台ezoffice wpsservlet接口任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞描述 万户ezOFFICE协同管理平台是一个综合信息基础应用平台&am…

Linux网络——高级IO

目录 一.五种IO模型 1.阻塞式IO 2.非阻塞式IO 3.信号驱动IO 4.多路转接IO&#xff1a; 5.异步IO 二.同步通信 vs 异步通信 三.设置非阻塞IO 1.阻塞 vs 非阻塞 2.非阻塞IO 3.实现函数SetNoBlock 四.I/O多路转接之select 1.初识select 2.select函数原型 3.socket就绪…

3.c++进阶语法函数和指针

1.函数 5&#xff1a;03 2.指针

【51单片机系列】74HC595扩展实验之使用74HC595芯片在LED点阵中显示数字

本实验实现的功能是使用74HC595芯片实在LED点阵中显示数字字符0。 要点亮多个LED灯&#xff0c;需要用到动态数码管的动态扫描原理。 首先如何点亮一行上面的多个灯或一列上面的多个灯&#xff0c;明显就是需要某行或某列有效&#xff0c;同时使多列或多行有效。比如在第一行有…

记录 | xftp远程连接两台windows

1、打开openssh 设置 -> 应用 -> 可选功能 -> 添加功能 -> OpenSSH 客户端&#xff0c;将 ssh 客户端安装将两台电脑的 ssh 开启&#xff0c;cmd 中输入 net start sshd2、配置 win10 账号密码 3、进行 xftp 连接

【Spring】@SpringBootApplication注解解析

前言&#xff1a; 当我们第一次创建一个springboot工程时&#xff0c;我们会对启动类&#xff08;xxxApplication&#xff09;有许多困惑&#xff0c;为什么只要运行启动类我们在项目中自定义的bean无需配置类配置&#xff0c;扫描就能自动注入到IOC容器中&#xff1f;为什么我…

java--LinkedList集合的底层原理

1.什么是链表&#xff1f;有啥特点&#xff1f; ①链表中的结点是独立的对象&#xff0c;在内存中是不连续的&#xff0c;每个结点包含数据值和下一个结点的地址。 ②链表的特点1&#xff1a;查询慢&#xff0c;无论查询那个数据都要从头开始找。 ③链表的特点2&#xff1a;链…

day3_qt

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

进程、容器与虚拟机的区别

进程、容器与虚拟机 参考&#xff1a;关于进程、容器与虚拟机的区别&#xff0c;你想知道的都在这&#xff01; 进程、容器与虚拟机的结构图 进程 介绍 进程是一个正在运行的程序&#xff0c;它是一个个可执行文件的实例。当一个可执行文件从硬盘加载到内存中的时候&#xf…

安装Anconda时出现Failed to extract packages的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法 1. 问题所示 在win7安装Anconda的时候&#xff0c;出现Failed to extract packages 截图如下所示&#xff1a; 2. 原理分析 该版本过于新&#xff0c;无法兼容win7系统&#xff0c;要么更换系统 要么将anconda版本降低即可 3. 解决…