iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3怎么利用pathlib替代os.path
  • 539
分享到

python3怎么利用pathlib替代os.path

2023-06-30 04:06:32 539人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python3怎么利用pathlib替代os.path”,在日常操作中,相信很多人在python3怎么利用pathlib替代os.path问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pyt

这篇文章主要介绍“python3怎么利用pathlib替代os.path”,在日常操作中,相信很多人在python3怎么利用pathlib替代os.path问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python3怎么利用pathlib替代os.path”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    前言

    如果你还在为操作文件路径烦恼,不会使用os.path模块,那么是时候试试pathlib了。

    pathlib 库

    pathlib 库从 python3.4 开始,到 python3.6 已经比较成熟。如果你的新项目可以直接用 3.6 以上,建议用 pathlib。相比于老式的 os.path 有几个优势:

    • 老的路径操作函数管理比较混乱,有的是导入 os, 有的又是在 os.path 当中,而新的用法统一可以用 pathlib 管理。

    • 老用法在处理不同操作系统 win,Mac 以及 linux 之间很吃力。换了操作系统常常要改代码,还经常需要进行一些额外操作。

    • 老用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。

    • pathlib 简化了很多操作,用起来更轻松。

    常用的 pathlib 和 os 对比图

    操作os and os.pathpathlib
    绝对路径os.path.abspathPath.resolve
    修改权限os.chmodPath.chmod
    创建目录os.mkdirPath.mkdir
    重命名os.renamePath.rename
    移动os.replacePath.replace
    删除目录os.rmdirPath.rmdir
    删除文件os.remove, os.unlinkPath.unlink
    工作目录os.getcwdPath.cwd
    是否存在os.path.existsPath.exists
    用户目录os.path.expanduserPath.expanduser and Path.home
    是否为目录os.path.isdirPath.is_dir
    是否为文件os.path.isfilePath.is_file
    是否为连接os.path.islinkPath.is_symlink
    文件属性os.statPath.stat, Path.owner, Path.group
    是否为绝对路径os.path.isabsPurePath.is_absolute
    路径拼接os.path.joinPurePath.joinpath
    文件名os.path.basenamePurePath.name
    上级目录os.path.dirnamePurePath.parent
    同名文件os.path.samefilePath.samefile
    后缀os.path.splitextPurePath.suffix

    pathlib 获取文件路径

    Path.cwd 获取当前文件夹路径

    需注意的是,返回的不是字符串,而是 windowsPath 对象

    from pathlib import Path# 1.可以直接调用类方法.cwd()print(Path.cwd())  # C:\Users\dell\PyCharmProjects\untitled3\demo# 2.也可以实例化后调用p = Path('./')print(p.cwd()) # C:\Users\dell\PycharmProjects\untitled3\demoprint(type(p.cwd()))  # <class 'pathlib.WindowsPath'>

    获取当前文件路径

    from pathlib import Path# 当前文件路径p = Path(__file__)print(p)

    获取 Path 对象绝对路径

    from pathlib import Path# 当前文件路径p = Path('data.JSON')print(p)  # data.json 对象print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\data.json

    一些常用的获取文件属性

    from pathlib import Path# 当前文件路径p = Path(__file__)print(p.absolute())   # 获取绝对路径print(p.resolve())    # 获取绝对路径print(p.name)   # 获取文件名称 'a1117.py'print(p.stem)    # 只要文件名,不要后缀 a1117print(p.suffix)  # 获取文件 后缀.pyprint(p.suffixes)  # 文件所有的猴子 ['.py']print(p.parts)  # 拆分('C:\\', 'Users', 'dell', 'PycharmProjects', 'untitled3', 'demo', 'a1117.py')print(p.parent)  # C:\Users\dell\PycharmProjects\untitled3\demoprint(p.parent.parent)  # C:\Users\dell\PycharmProjects\untitled3print(p.parents)  # 所有的父级 <WindowsPath.parents>print(p.anchor)  # 锚,目录前面的部分 C:\ 或者 /

    获取上层,上上层目录

    from pathlib import Path# .parent 获取上一层print(Path.cwd().parent)# 实例化后调用 .parentp = Path('./')print(p.cwd().parent)

    获取上上层使用链式方法调用 .parent.parent

    from pathlib import Path# .parent 获取上一层print(Path.cwd().parent.parent)# 实例化后调用 .parentp = Path('./')print(p.cwd().parent.parent)

    获取用户home目录

    from pathlib import Pathprint(Path.home())  # c:\Users\dell

    判断文件,文件夹

    is_file()判断是不是文件

    from pathlib import Path# 1.  is_file() 判断是不是文件print(Path.cwd().is_file())  # False# 2.也可以实例化后调用p = Path('./data.json')print(p.is_file())  # True

    is_dir() 判断是否是文件夹

    from pathlib import Path# 1.  is_file() 判断是不是文件print(Path.cwd().is_dir())  # True# 2.也可以实例化后调用p = Path('./data.json')print(p.is_dir())  # False

    exists() 判断文件 或文件夹是否存在

    from pathlib import Path# exists() 判断是否存在p = Path('./data.json')print(p.exists())  # True or False

    is_absolute() 判断是否是绝对路径

    from pathlib import Path# 当前文件路径p = Path(__file__)print(p)print(p.is_absolute())  # True

    joinpath 拼接目录

    可以用类似 os.path.join 的方法

    from pathlib import Path# 当前文件路径p = Path('./')print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demoprint(p.joinpath('data.json'))  # data.jsonprint(p.joinpath('data.json').absolute())   # C:\Users\dell\PycharmProjects\untitled3\demo\data.json# 拼接多层print(p.joinpath('files', 'data.json'))   # files\data.jsonprint(p.joinpath('files', 'data.json').absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\files\data.json

    pathlib 支持用 / 拼接路径, 这种语法估计用的人很少

    from pathlib import Path# 当前文件路径p = Path('./')# / 拼接new_path = p / 'files' / 'data.json'print(new_path.absolute())

    iterdir()遍历文件目录

    比如在当前脚本的 files 目录有以下文件夹和子文件

    python3怎么利用pathlib替代os.path

    .iterdir() 遍历某个目录下的所有路径(文件和子目录)

    from pathlib import Path# 当前文件路径p = Path('files')for i in p.iterdir():    print(i.absolute())"""运行结果:C:\Users\dell\PycharmProjects\untitled3\demo\files\jsonC:\Users\dell\PycharmProjects\untitled3\demo\files\username.txtC:\Users\dell\PycharmProjects\untitled3\demo\files\yaml"""

    如果只需获取文件夹,可以加个判断.is_dir()

    from pathlib import Path# 当前文件路径p = Path('files')print([i for i in p.iterdir() if i.is_dir()])  # [WindowsPath('files/json'), WindowsPath('files/yaml')]

    也可以用.is_file获取文件对象

    from pathlib import Path# 当前文件路径p = Path('files')print([i for i in p.iterdir() if i.is_file()])  # [WindowsPath('files/username.txt')]

    glob() 和 rglob() 模式匹配(正则表达式

    使用模式匹配(正则表达式)匹配指定的路径。glob 只会匹配当前目录下, rglob 会递归所有子目录 比如在当前脚本的 files 目录有以下文件夹和子文件

    python3怎么利用pathlib替代os.path

    glob 只会匹配当前目录下

    from pathlib import Pathp = Path('files')# glob 只会遍历查找当前目录print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]print([i for i in p.glob('*.yml')])  # []

    rglob 会递归所有子目录

    from pathlib import Pathp = Path('files')# glob 只会遍历查找当前目录print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]

    match() 检查路径是否符合规则

    from pathlib import Pathp = Path('data.json')# math 检查匹配规则print(p.match('*.json'))  # True

    创建文件操作

    touch() 创建文件

    from pathlib import Pathp = Path('xx.json')p.touch()   # 创建一个xx.json

    当文件已经存在的时候,p.touch() 也不会报错,因为默认参数 exist_ok=True 如果设置 exist_ok=False, 文件已经存在,touch就会报错了

    from pathlib import Pathp = Path('xx.json')p.touch(exist_ok=False)   # 创建一个xx.json

    抛出异常FileExistsError: [Errno 17] File exists: 'xx.json'

    mkdir() 创建目录

    在当前脚本下创建一个yoyo目录

    from pathlib import Pathp = Path('yoyo')# mkdir 创建yoyo目录p.mkdir()

    如果想一次性创建多层目录 'yoyo/json'

    from pathlib import Pathp = Path('yoyo/json')# mkdir 创建yoyo/json目录p.mkdir()

    此时会抛出异常FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'yoyo\json'

    递归创建目录mkdir(parents=True)

    from pathlib import Pathp = Path('yoyo/json')# mkdir 创建yoyo/json目录p.mkdir(parents=True)

    删除文件操作

    删除目录非常危险,并且没有提示,一定要谨慎操作

    rmdir() 一次只删除一级目录,且当前目录必须为空。

    from pathlib import Pathp = Path('yoyo/json')# mkdir 创建yoyo/json目录p.rmdir()

    unlink() 删除文件

    from pathlib import Pathp = Path('files/username.txt')p.unlink()

    文件读写操作

    pathlib 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。

    • .read_text() 读取文本

    • .read_bytes() 读取 bytes

    • .write_text() 写入文本

    • .write_bytes() 写入 tytes

    from pathlib import Pathp = Path('yo.txt')p.write_text("hello world")print(p.read_text())  # hello world

    file.write 操作使用的是 w 模式,如果之前已经有文件内容,将会被覆盖。

    修改文件

    replace() 移动文件

    from pathlib import Pathp = Path('yo.txt')p.write_text("hello world")print(p.read_text())  # hello worldp.replace('xx.json')

    with_name() 重命名文件

    from pathlib import Pathp = Path('hello.txt')p.write_text("hello world")print(p.read_text())  # hello world# 重命名为一个新的文件对象new_file = p.with_name('x.txt')print(new_file)p.replace(new_file)  # 移动到新的位置

    到此,关于“python3怎么利用pathlib替代os.path”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: python3怎么利用pathlib替代os.path

    本文链接: https://www.lsjlt.com/news/327365.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • python3怎么利用pathlib替代os.path
      这篇文章主要介绍“python3怎么利用pathlib替代os.path”,在日常操作中,相信很多人在python3怎么利用pathlib替代os.path问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pyt...
      99+
      2023-06-30
    • python3利用pathlib替代os.path的方法实例
      目录前言pathlib 库pathlib 获取文件路径Path.cwd 获取当前文件夹路径获取当前文件路径获取 Path 对象绝对路径一些常用的获取文件属性获取上层,上上层目录获取用...
      99+
      2024-04-02
    • 怎么使用Python3中的pathlib
      这篇文章主要讲解了“怎么使用Python3中的pathlib”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python3中的pathlib”吧!使用pathlib处理更好的路径pat...
      99+
      2023-06-02
    • 怎么在python中利用pathlib构建路径
      怎么在python中利用pathlib构建路径?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack...
      99+
      2023-06-14
    • 【Python3爬虫】教你怎么利用免费代
      有时候你的爬虫刚开始的时候可以正常运行,能够正常的爬取数据,但是过了一会,却出现了一个“403 Forbidden",或者是”您的IP访问频率太高“这样的提示,这就意味着你的IP被ban了,好一点的情况是过一段时间你就能继续爬取了,坏一...
      99+
      2023-01-30
      爬虫 教你
    • Android中的Tabhost怎么利用FragmentTabhost进行替代
      这期内容当中小编将会给大家带来有关Android中的Tabhost怎么利用FragmentTabhost进行替代,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android 使用FragmentTabho...
      99+
      2023-05-31
      android fragmenttabhost tabhost
    • Android 代码中的XML怎么利用控件进行代替
      本篇文章给大家分享的是有关Android 代码中的XML怎么利用控件进行代替,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码:Button btn = new Butto...
      99+
      2023-05-31
      android roi xml
    • 怎么用SQL代替DSL
      这篇文章主要为大家展示了“怎么用SQL代替DSL”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用SQL代替DSL”这篇文章吧。SQL REST API在Kibana Console中输入:P...
      99+
      2023-06-27
    • 怎么用mongodb替代es
      要将MongoDB替换为Elasticsearch,您需要采取以下步骤:1. 将MongoDB中的数据导出为JSON格式。您可以使用...
      99+
      2023-09-06
      mongodb
    • Python os和os.path模块怎么用
      本文小编为大家详细介绍“Python os和os.path模块怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python os和os.path模块怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
      99+
      2023-06-29
    • C语言中怎么利用软件代替Mutex互斥锁
      本篇文章给大家分享的是有关C语言中怎么利用软件代替Mutex互斥锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言在 Linux  系统中,当多个线程并行执行时...
      99+
      2023-06-15
    • pathlib模块怎么在python中使用
      这篇文章给大家介绍pathlib模块怎么在python中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.t...
      99+
      2023-06-14
    • ALT代替属性怎么用
      这篇文章主要介绍了ALT代替属性怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ALT-代替属性,用来对网页上的图片进行描述,光标在图片上时显示的提示语即采用该标签实现,...
      99+
      2023-06-13
    • 大规模采用Kotlin替代Java的利弊
      大规模采用Kotlin替代Java具有以下利益和弊端:利益:1. 更简洁的语法:Kotlin具有简洁的语法和更少的样板代码,可以减少...
      99+
      2023-09-22
      Java
    • Linux下ip替代ifconfig怎么用
      小编给大家分享一下Linux下ip替代ifconfig怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果你使用 Linux 足够久,那么...
      99+
      2023-06-16
    • java中怎么用@RequiredArgsConstructor代替@Autowired
      这篇文章主要为大家展示了“java中怎么用@RequiredArgsConstructor代替@Autowired”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中怎么用@Required...
      99+
      2023-06-27
    • 怎么使用Python标准库pathlib
      本篇内容主要讲解“怎么使用Python标准库pathlib”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python标准库pathlib”吧!学习 Python 时,尤其是在进行文件操作...
      99+
      2023-06-25
    • 怎么使用systemd timer替代cronjob
      今天小编给大家分享一下怎么使用systemd timer替代cronjob的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
      99+
      2023-07-05
    • C++11中怎么利用移动类对象代替拷贝类对象
      今天就跟大家聊聊有关C++11中怎么利用移动类对象代替拷贝类对象,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。string类是C++标准库中一个很重要的类,使用非常方便。但是它存在一...
      99+
      2023-06-19
    • win7怎么用键盘代替鼠标
      今天小编给大家分享一下win7怎么用键盘代替鼠标的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。win7用键盘代替鼠标方法首先...
      99+
      2023-07-01
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作