PythonPathlib与os浅析对比

玩转Python

这是我参与8月更文挑战的第13天,活动详情查看: 8月更文挑战

复习回顾

我们在前面学习对文件路径操作的os.path模块pathlib模块,不熟悉的小伙伴可以前往学习一下。

  • pathlib 模块从 python3.4 开始,到 python3.6 已经比较成熟。

  • 对比老式的 os.path,pathblib有几个优势:

    1. 传统操作导入模块不统一。 既可以导入 os,又可以导入 os.path,而新的用法统一可以用 pathlib 管理。

    2. 传统操作在不同操作系统之间切换麻烦。 换了操作系统常常要改代码,还经常需要进行一些额外操作。

    3. 返回的数据类型不同。

    (1)传统主要是函数形式,返回的数据类型通常是字符串。

    (2)但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。

    (3)Pathlib模块是面向对象,处理起来更灵活方便。

    4. pathlib 简化了很多操作,用起来更轻松

本期,我们将学习一下,Pathlib模块与os模块方法进行对比学习,看看同样操作,os模块与Pathlib模块方法的差异点

🎵🎵废话不多说,我们来学习pathlib模块与os模块相关方法的对比吧,Let's go~

1. 获取当前路径方式

👉os模块: 使用os.getcwd()函数方法来获取当前路径

import os.path

Os = os.getcwd()

print("Os 路径为:",Os)
复制代码

👉pathlib模块: 使用具体路径Path对象调用cwd()方法来获取当前路径

import pathlib


Pa = pathlib.Path()

print("Pa 路径",Pa.cwd())
复制代码

获取当前路径运行结果

2. 获取上级/上上级目录

文件目录结构展示图:

文件目录结构

👉os模块: 使用os.path.dirname来嵌套调用获取上级及上上级目录路径

import os.path

print("os.path模块获取上层目录:",os.path.dirname(os.getcwd()))
print("os.path模块获取上上层目录:",os.path.dirname(os.path.dirname(os.getcwd())))
复制代码

👉pathlib模块: 使用Path/PurePath对象调用parent属性来获取符级目录

import pathlib

Pa = pathlib.Path()

print("pathlib获取上层目录:",Pa.cwd().parent)
print("pathlib获取上上层目录:",Pa.cwd().parent.parent)
复制代码

获取父目录运行结果

3. 拼接目录

👉os模块: 使用join()方法嵌套调用dirname()方法。层层调用,不易阅读

import os.path


print("os,path模块拼接路径:",os.path.join(os.path.dirname(os.getcwd()),"New","test1.txt"))
复制代码

👉pathlib模块: 使用parent属性后调用join()连接相关路径,简洁明了

import pathlib


Pa = pathlib.Path()

paths = ["New","test1.txt"]

print("pathlib模块路径拼接:",Pa.cwd().parent.joinpath(*paths))
复制代码

拼接路径运行结果

4. 创建文件夹并重命名

👉os模块: 创建多个层级下的文件名字,需要写复杂的嵌套

import os.path

# 创建 JueJin/Test目录
os.makedirs(os.path.join('JueJin', 'Test'), exist_ok=True)

# 将test.txt重命名为 JueJin/Tests.txt
os.rename('test.txt', os.path.join('JueJin', 'Tests.txt'))
复制代码

👉pathlib模块: Path对象可以直接创建对应目录下,无需写嵌套式调用

import pathlib

# 创建 JueJin/Test目录
pathlib.Path("JueJin/Test").mkdir(parents=True,exist_ok=True)

# 将test.txt重命名为 JueJin/Tests.txt
pathlib.Path("test.txt").rename("Juejin/Tests.txt")
复制代码

5. Pathlib方法图解

网传很火的一张Pathlib模块方法汇总图,简单直观,大家学习的时候可以看一下

网传图片

6. os.path和pathlib对照表

操作 os and os.path pathlib
绝对路径 os.path.abspath Path.resolve
修改权限 os.chmod Path.chmod
创建目录 os.mkdir Path.mkdir
重命名 os.rename Path.rename
移动 os.replace Path.replace
删除目录 os.rmdir Path.rmdir
删除文件 os.removeos.unlink Path.unlink
工作目录 os.getcwd Path.cwd
是否存在 os.path.exists Path.exists
用户目录 os.path.expanduser Path.expanduser,Path.home
是否为目录 os.path.isdir Path.is_dir
是否为文件 os.path.isfile Path.is_file
是否为连接 os.path.islink Path.is_symlink
文件属性 os.stat Path.statPath.ownerPath.group
是否为绝对路径 os.path.isabs PurePath.is_absolute
路径拼接 os.path.join PurePath.joinpath
文件名 os.path.basename PurePath.name
上级目录 os.path.dirname PurePath.parent
同名文件 os.path.samefile Path.samefile
后缀 os.path.splitext PurePath.suffix

总结

本期,我们学习Pathlib模块os.path模块对操作系统路径操作方法进行对比差异

pathlib 模块较于os.path 模块提供的方法更加简单方便,提高我们代码简单和可维护

如果你的新项目可以直接用 3.6 以上,建议用 pathlib。

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹🌹🌹🌹✈️