Python os.path模块的使用

2023-11-08

Python os.path模块的使用

Python的os模块是一个对接操作系统的模块,当我们需要对路径进行操作时,可以使用os.path。

os.path模块实现了很多处理长文件名,长路径名的函数,可以用来对路径切分,拼接,转换等。

先导入os模块,然后就可以使用 os.path 模块了。

一、os.path获取路径

# coding=utf-8
import os


# 返回当前位置的绝对路径
print(os.getcwd())
print(os.path.abspath('.'))
# 返回path的真实路径
print(os.path.realpath('..'))
# 返回从start开始计算的相对路径
print(os.path.relpath('.', '/home/python/Desktop'))

运行结果:

/home/python/Desktop/python_demo/os_test
/home/python/Desktop/python_demo/os_test
/home/python/Desktop/python_demo
python_demo/os_test

在本文中,运行的系统是Linux系统,当然,这些方法在windows下全部都是可以使用的,只要传入正确的值就行。

一开始,我使用os.getcwd()打印了当前所在的绝对路径: /home/python/Desktop/python_demo/os_test,当前的位置是根目录下的用户家目录下的python用户的桌面下的python_demo下的os_test目录中,上面运行的代码写在os_path_demo.py文件中。这很简单,但这是本文所有运行结果的前提,所以先说明一下。

os.path.abspath(path) 返回path的绝对路径,传入 . 和 .. 也可以,分别会返回当前路径和上级目录的绝对路径。

os.path.realpath(path) 返回path的真实路径,与abspath(path)的结果相同。

os.path.relpath(path, start) 返回path相对于start的相对路径,也就是从start目录找到path的路径。

二、os.path对路径进行处理

# 返回文件夹的名字或文件名
print(os.path.basename('./os_path_demo.py'))
print(os.path.basename('/home/python/Desktop/python_demo/os_test'))
# 返回多个路径共有的最长的路径
print(os.path.commonpath(['/home/python/Desktop/python_demo/os_test', '/home/python/Desktop/python_demo']))
# 返回文件夹或文件所在的路径(可能会有问题)
print(os.path.dirname('/home/python/Desktop/python_demo/os_test/os_path_demo.py'))
# 返回路径是否存在
print(os.path.exists('/home/python/Desktop/python_demo/os_test'))
print(os.path.lexists('/home/python/Desktop/python_demo/os_test'))
# 把路径中的“~”转换成用户目录(可能会有问题)
print(os.path.expanduser('~/Desktop/python_demo/os_test'))
# 把路径中的环境变量换成路径  env  export
print(os.path.expandvars('${SHELL}'))

运行结果:

os_path_demo.py
os_test
/home/python/Desktop/python_demo
/home/python/Desktop/python_demo/os_test
True
True
/home/python/Desktop/python_demo/os_test
/bin/bash

os.path.basename(path) 返回当前目录的名字或文件名,结果是path的最后一个斜杠后的字符串。

os.path.commonpath([path1, path2]) 返回两个路径path1和path2的共同路径中最长的路径。如果有父子目录的关系,则返回父目录。这里传入的参数是一个列表,也就是说,如果比较的不只两个路径,而是多个,只要将路径加到列表中,也可以完成比较。

os.path.dirname(path) 返回文件夹或文件所在的路径,结果是path最后一个斜杠前的字符串,这与basename()刚好相反。不过这里需要注意,如果传入的路径是一个不存在的路径,也会返回结果,因为这个方法其实只是对传入的路径字符串进行截取,并不判断系统中是否有此路径。所以在传值时,要保证传入的是一个正确的路径。

os.path.exists(path) 返回系统中是否真正存在路径path。

os.path.lexists(path) 结果与exists()相同。

os.path.expanduser(path) 传入的path以~开头, 该方法会自动将~替换成当前用户的用户目录,如:/home/python。这里的用户是当前用户,如果换了用户,则用户目录也跟随改变。使用这个方法也需要注意,传入不存在的路径,方法不能识别,因为这个方法只是对字符~进行替换,并不判断系统中是否有此路径。所以传值时,要保证传入的是一个正确的路径,刚好,可以使用exists()来判断。

os.path.expandvars(path) 传入的path中包含了系统的环境变量,格式为 ${name} ,该方法会自动将环境变量替换成指向的路径。如果是不存的环境变量,则返回的是原样的字符串。同样,此方法也不能判断路径的真实性,我们在传入路径和环境变量时,要保证传入的路径和环境变量正确。获取系统有哪些环境变量可以在终端使用env命令或export命令查看。

三、os.path对路径或文件的判断

# 返回路径是否为绝对路径(可能会有问题)
print(os.path.isabs('Desktop/python_demo/os_test'))
# 返回是不是文件
print(os.path.isfile('Desktop/python_demo/os_test'))
print(os.path.isfile('./os_path_demo.py'))
# 返回是不是目录
print(os.path.isdir('.'))
print(os.path.isdir('./os_path_demo.py'))
# 判断是不是链接
print(os.path.islink('./os_path_demo.py'))
# 判断是不是挂载点 df -a
print(os.path.ismount('/dev'))

运行结果:

False
False
True
True
False
False
True

os.path.isabs(path) 返回path是不是绝对路径。这个方法只是判断path的开头的是不是以斜杠开头,没有判断path是不是真的存在,所以传入path时要保证正确。

os.path.isfile(path) 返回path是不是文件,如果path的结束是一个文件,则返回True,否则返回False。

os.path.isdir(path) 返回path是不是路径,与isfile()相反。

os.path.islink(path) 返回path是不是链接,如果path的结束是一个链接,则返回True,否则返回False。

os.path.ismount(path) 返回path是不是挂载点,如果path是一个挂载点,则返回True,否则返回False。查看当前系统的挂载点可以使用 df -a 命令查看。

四、os.path拼接或拆分路径

# 把目录和文件名合成一个路径
print(os.path.join('Desktop/python_demo/os_test', 'os_path_demo.py'))
# 把路径切割成目录和文件名
print(os.path.split('/home/python/Desktop/python_demo/os_test/os_path_demo.py'))
# 返回驱动器名和路径组成的元组
print(os.path.splitdrive('/home/python/Desktop/python_demo/os_test/os_path_demo.py'))
# 返回路径名和扩展名(文件后缀)的元组
print(os.path.splitext('/home/python/Desktop/python_demo/os_test/os_path_demo.py'))

运行结果:

Desktop/python_demo/os_test/os_path_demo.py
('/home/python/Desktop/python_demo/os_test', 'os_path_demo.py')
('', '/home/python/Desktop/python_demo/os_test/os_path_demo.py')
('/home/python/Desktop/python_demo/os_test/os_path_demo', '.py')

os.path.join(path, file) 返回目路径的真实性。录和文件名拼接后的路径。这里只是做拼接,没有判断路径是否真的存在,所以传入参数时要注意

os.path.split(path) 与join()相反,将path切分成目录和文件名,结果是一个元组。

os.path.splitdrive(path) 返回驱动器名和路径名,结果是一个元组。

os.path.splittext(path) 返回文件名和文件后缀名,结果是一个元组。

五、os.path返回文件的访问时间和大小

# 返回最近访问时间
print(os.path.getatime('./os_path_demo.py'))
print(os.path.getmtime('./os_path_demo.py'))
print(os.path.getctime('./os_path_demo.py'))
# 返回文件的大小
print(os.path.getsize('./os_path_demo.py'))

运行结果:

1565794870.657664
1565794870.5253758
1565794870.5253758
3176

os.path.getatime(file) 返回文件的最近访问时间戳。

os.path.getmtime(file) 返回文件的最近修改时间戳。

os.path.getctime(file) 返回文件的创建时间戳。

os.path.getsize(file) 返回文件的大小,如果文件不存在,会报错。

六、os.path比较两个路径或文件是否相同

# 判断目录或文件是否相同
print(os.path.samefile('.', '/home/python/Desktop/python_demo/os_test'))
print(os.path.samefile('os_path_demo.py', '/home/python/Desktop/python_demo/os_test/os_path_demo.py'))
fd = os.open('os_path_demo.py', os.O_RDONLY)
fd2 = os.open('os_path_demo.py', os.O_RDONLY)
print(fd)
print(fd2)
# 判断两个文件描述符是否指向同一个文件
print(os.path.sameopenfile(3, 4))
stat = os.stat('os_path_demo.py')
stat2 = os.lstat('os_path_demo.py')
print(stat)
print(stat2)
# 判断两个star是否指向同一个文件
print(os.path.samestat(stat, stat2))

运行结果:

True
True
3
4
True
os.stat_result(st_mode=33204, st_ino=656046, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=3157, st_atime=1565711348, st_mtime=1565711348, st_ctime=1565711348)
os.stat_result(st_mode=33204, st_ino=656046, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=3157, st_atime=1565711348, st_mtime=1565711348, st_ctime=1565711348)
True

os.path.samefile(path1, path2) 判断两个目录或文件是不是同一个目录或文件。

os.path.sameopenfile(fd1, fd2) 判断文件描述符fd1和fd2是不是指向同一个文件。

os.path.samestat(stat1, stat2) 判断文件状态stat1和stat2是不是同一个文件的状态信息。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python os.path模块的使用 的相关文章

随机推荐

  • GO语言学习-Sublime+Go语言环境搭建

    sublime text3 Golang 搭建开发环境 1 引言 sublime text3搭建Golang的开发环境顺序为 1 安装Golang 2 sublime 安装 Gosublime 3 修改Gosublime中的配置 使之支持G
  • 基于蓝牙技术使用stm32制造一个智能小车 (寻迹,避障,遥控)

    目录 1 制作智能小车的硬件名单 3 引脚图 2 先让小车动起来 1 小车运动 2 代码 3 寻迹 1 工作原理 2 代码 4 超声波避障 1 工作原理 2 代码 5 蓝牙遥控 1 蓝牙工作原理 2 代码 6 oled屏幕 1 工作内容 7
  • Bootstarp入门教程(3)栅格系统

    栅格系统简介 栅格系统用于通过一系列的行 row 与列 column 的组合创建页面布局 你的内容就可以放入创建好的布局中 下面就介绍以下Bootstrap栅格系统的工作原理 行 row 必须包含在 container中 以便为其赋予合适的
  • 【最新】Java基础学习笔记(20天学会java黑马)(一)

    文章目录 Java背景 初步了解 Java快速入门 HelloWorld案例 Java基础语法 注释 数据类型 变量 关键字与标志符 类型转换 强制类型转换 运算符 算术运算符 赋值运算符 自增自减运算符 关系运算符 逻辑运算符 短路逻辑运
  • 基于Linux系统下安装Tomcat

    Tomcat服务器是一个免费开放开源的轻量级Web应用服务器 可以实现项目的部署和管理 本博客将实现Tomcat在Linux操作系统中的安装 1 检查系统中是否有java JDK 1 1 Windows系统下查看 使用 Win R键打开运行
  • eclipse中编写spring配置文件时有design和source,namespace 如何设置出来的问题

    首先要安装Spring插件 在已经装了 spring插件的情况下 右键点击你要显示的 xml文件 会出来 open with gt spring config editor 如图
  • ubuntu18.04安装显卡驱动 + CUDA + cuDNN+Tensorflow+pytorch

    GeForce MX150 Python3 6 cuda 9 0 cudnn 7 tensorflow 1 12 0 按多个教程安装前后也出了很多问题 最终才安装成功 以防万一 现将过程记录如下 1 安装显卡驱动 注意 两种方法 方法一为我
  • vue 设置提示 @ 路径 和 ~@ 路径

    菜鸟最近用公司的电脑开发 结果发现之前有的路径提示全没了 感觉非常难受 然后去插件一看才发现 好像是菜鸟自己不小心把这个插件给删了 有点难受 但是安装了这插件还是有点不好用 就是感觉每次使用了 vue 的 或者 开头的路径时 总是没有提示
  • React:‘XXX’ is defined but nerver used的解决方法

    原因 想引入Login组件 但是一直显示 组件被定义但从未使用 的字样 但是我明明就有引用吖 解决方法 原来是组件的文件名首字母需要大写 因为要做项目 但是React的基础课程还没学完 只好以这种半桶水的知识与头脑去做项目 难免会遇到很多困
  • 关于车载以太网理解

    目录 1 车载以太网概述 2 物理层 PHY 2 1 总体说明 2 2 物理层架构 2 3 物理层控制器的架构 2 4 物理层编码原理 3 链路层 MAC 3 1 MAC控制器架构 3 2 MAC地址 3 3 数据传输 3 4 MAC帧格式
  • 【拜小白的机器学习】5-机器学习的评估度量标准(评估)

    在上一节中我们主要讲到机器学习的评估方法 其中重点是讲解了三种对数据集的划分方式 包括留出法 hold out 交叉验证法 k fold cross validation 自助法 bootstrap 本节来看看机器学习的评估度量标准 其中我
  • Spring之功能使用

    文章目录 注入bean 配置文件 set方式 构造方法注入 根据参数类型注入 根据构造函数的顺序 类型和顺序混合使用 使用name来注入 工厂模式注入 少用 注入不同的类型 字面量 引用其他bean 内部bean 设置null 联级设置属性
  • html+css+js实现星空特效

    html css js实现星空特效 本文已同步到凯文的博客https kevindurant source github io 废话不多说直接上代码 效果是一个星空旋转和文字逐渐出现的效果 文字是逐渐出现的 星空中的小球是旋转的 效果视频博
  • 词法分析器简介

    词法分析器简介 引言 编译器的工作的开始 就是读入源码 预编译先不考虑 然后 去除一些空字符 然后经过词素匹配 并和其属性 可选 组成一个的词法单元 多个词法单元 连接成词法单元序列 自此 此法分析器的工作就算完成了 呵呵 就这么简单 可见
  • sourcetree创建分支与分支合并

    一 Sourcetree简单介绍 通过Git可以进行对项目的版本管理 但是如果直接使用Git的软件会比较麻烦 因为是通过一条一条命令进行操作的 Sourcetree则可以与Git结合 提供图形界面 使用会方便很多 Git和Sourcetre
  • Flowable BPMN 用户手册 (v 6.3.0)

    小编本来想学习 activity但是被同事强烈推荐学习Flowable 百度了一下发现Flowable是activity的一个升级 第一步找学习资料 找到一个分享给大家 https tkjohn github io flowable use
  • linux的核心安装下的命令行,linux lilo命令安装核心载入,开机管理程序

    lilo linux loader 安装核心载入 开机管理程序 语 法 lilo clqtV b C d D f i I m P r R s S uU v 补充说明 lilo 是个 Linux 系统核心载入程序 同时具备管理开机的功能 单独
  • 合理使用 inline来优化程序 尽可能减少临时对象 尽可能使用初始化列表

    1 合理使用inline 调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址 将函数的程序 内容执行完后 再返回到转去执行该函数前的地方 这种转移操作要求在转去前 要保护现场并记忆执行的地址 转回后先要恢复现场 并按原来保存地址
  • Would you like Visual Studio Code to periodically run “git fetch“?是什么意思?

    这句话的意思是 你是否想让Visual Studio Code定期运行 git fetch 命令 git fetch 是 Git 命令之一 用于从远程代码仓库获取最新的代码变动 但不会自动将这些变动合并到你当前所在的分支 该命令通常用于更新
  • Python os.path模块的使用

    Python os path模块的使用 Python的os模块是一个对接操作系统的模块 当我们需要对路径进行操作时 可以使用os path os path模块实现了很多处理长文件名 长路径名的函数 可以用来对路径切分 拼接 转换等 先导入o