Python Pathlib与os浅析对比

2,529 阅读3分钟

玩转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.pathpathlib
绝对路径os.path.abspathPath.resolve
修改权限os.chmodPath.chmod
创建目录os.mkdirPath.mkdir
重命名os.renamePath.rename
移动os.replacePath.replace
删除目录os.rmdirPath.rmdir
删除文件os.removeos.unlinkPath.unlink
工作目录os.getcwdPath.cwd
是否存在os.path.existsPath.exists
用户目录os.path.expanduserPath.expanduser,Path.home
是否为目录os.path.isdirPath.is_dir
是否为文件os.path.isfilePath.is_file
是否为连接os.path.islinkPath.is_symlink
文件属性os.statPath.statPath.ownerPath.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模块os.path模块对操作系统路径操作方法进行对比差异

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

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

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