java 共享文件夹 没有用户名 path 可以用_赶紧用pathlib,一刻也不要耽误!

26efbca5fd91434bb298288d454d1df5.png

在python当中,如果你想控制路径,基本上绕不开os.path。

我希望看完这篇文章以后,熟练使用python的你能立刻开始使用pathlib模块,一刻也不要耽误。

pathlib相对于os.path有以下优势:

◆ pathlib导入更加清晰;

◆ 采用面向对象编程,能同时存储更多状态,os.path返回的通常只有一个字符串;

◆ pathlib使用更简单

a9dbb85f378d959a1b04aa5b28eed74a.png

获取路径相关信息

pathlib会把路径相关信息都存在一个Path的核心类里面,比如用户名,后缀名,上层目录,文件创建时间,文件大小等等。

这些os.path是没有办法一次性都给我们的,因为os.path调用的函数几乎都是返回字符串格式,不能像Path对象这样保存状态。

01 获取当前文件路径

这种操作方式可能会包含相对路径信息。

f09c9eea249f71efbd578b5fc100d2ed.png

02 当前文件夹路径

22302c25e6d7a4c30d0a4960e0feaf62.png

03 获取当前文件和文件夹的元信息

3a22a99b68e126580651c2f07d495737.png

04 Path('.') 这种方式可以包含相对路径 ../doc 等

如果要获取绝对路径要使用resolve获取绝对路径

3b14f66a735102c9a48d1240652adb02.png

如果路径不存在, 是不会抛出异常的。

如果想抛出异常,可以设置参数strict设为True,抛出FileNotFoundError

4f14a356c28e7c9477d9a55d71a805ea.png

05 获取父目录。

这是os.path最被人诟病的一点,你需要不停的通过os.path.dirname()去获取父目录,层级多了,心都碎了。 

在pathlib里,因为采用的是对象形式,可以直接通过parent属性获取父目录,父目录同时也是一个Path对象,照样可以用parent去获取目录

96d42468963e6a9f84d81a7640e21582.png

06 如果需要不停的返回上一级目录,不停的parent属性也会让人不厌其烦。

pathlib提供了一种更灵活的机制让你去获取高层父目录, 就是parents属性。

parents会把从根目录开始的所有层级都保存起来,直接通过索引获取对应层级就可以了

5b4cf2be3bcb76f15691e1ae210156d1.png

这里有一点非常遗憾,pathlib没有支持逆向索引,也就是说不能通过 parents[-2]去达到和current_path.parent.parent相同的效果。

在实际应用中,这种场景用得还是挺多的,需要通过某个文件获取上层路径,上上层路径

f17697e94a8852aac3a262b5e5591d85.png

提供一种封装思路:

890c13dcf82d372e1a98074be9567832.png

还有一种思路,重写源码中的 __getitem__ 方法,这里不做深入阐述。

07 获取文件名称

503fe4f3e9c52d9100044ccb72bc2783.png

08 获取文件后缀名

0b682ae407bccafc7039820ebb08dfef.png

09 获取不含后缀名的文件名

9dc620c55f2f3a4878036d2fc2925289.png

a9dbb85f378d959a1b04aa5b28eed74a.png

路径操作

01 with_name, 改变文件名

生成新路径,实际文件不发生变化

696b3be34d7781172f94cf2d8ae33507.png

02 with_suffix, 改变后缀名

67c0a699cd4245c8e51d2e1ebbcde256.png

03 路径拼接。 

pathlib提供了和os.path.join()类似的路径拼接方式:

c61a00d03f94782d59a8babda849fe57.png

更重要的是,他提供了一种更直观的方式 /:

27e23c8dc86da1a65a9b91cc1b27c7aa.png

这种方式的实现原理学过测试开发课程的同学应该很容易想到,定义一个除法运算的魔术方法就可以。

思考:pathlib可以完全代替os.path吗?

本文由柠檬班雨泽老师原创,转载需注明出处!

46a2469edacfc88e27e78a653bb3197c.png

转发到朋友圈是最高的赞赏

关注柠檬班微信公众号,获取最新技术文章

让软件测试学习变得更简单!

d0cad2af7e612c52d3cc36b9e5c6b7ca.gif

pathlib可以完全代替os.path吗?

想知道答案吗?

扫码获取答案

2f3a9d04a0196dea2a87c636f2fb29ae.png

e67e25722535ac227daee83a7d8b7ac7.png

来都来了,点个在看再走吧~~~

d8f176eb4647f06304285b23a76412e4.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值