问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python文件路径拼接技巧以及pathlib2插件

发布网友 发布时间:2024-10-03 08:16

我来回答

1个回答

热心网友 时间:2024-10-03 08:41

一.前言介绍

在项目中,我们经常会碰到要对文件或者是路径进行操作的需求,比如日志目录、测试报告目录、数据驱动目录以及提供一些路径操作的公共方法等, 在文件的路径拼接中,经常会将两个路径相拼接后得到一个新路径从而满足我们不同的需要。

不过因为Windows系统中路径符号用【反斜杠】表示:\

比如表示一个文件的路径为: C:\Users\Administrator\Desktop\test.xlsx

而在mac或者linux系统中路径符号用【正斜杠】表示:/

比如表示一个文件的路径为: /Users/home/Documents/test.xlsx

这就会导致一个问题,在使用路径拼接时,当字符串路径中含有斜杠或者是反斜杠时,虽然在当前的操作系统中运行是正常的,但是不能保证在其他操作系统中可以正常运行,比如在项目的框架搭建初时就需要考虑在文件的路径操作上尽量避免使用斜杠或者反斜杠,不然可能需要针对不同的操作系统进行适配

在我们最初接触文件操作的时候,掌握的第一个库是os库,里面有os.path.join()方法,可以利用它来在路径操作时,避免斜杠或反斜杠的直接使用,从而将一些路径或文件进行拼接,但是多层级路径操作时,需要多个join()方法来多次拼接,这样使用时易出错且不美观,可读性也不高

二.pathlib2插件介绍

那么这个问题需要解决,可以引入pathlib2这个插件 安装方式和文档见官网:

https://pypi.org/project/pathlib2/

下面介绍下这个库中对路径的常用操作: 安装好库后,可以导入模块

frompathlib2importPath路径的获取操作(常用):print(Path.cwd())#获取当前文件的目录(绝对路径)print(Path.home())#获取家目录(绝对路径)print(Path.cwd().parent)#获取当前目录的父目录(绝对路径)print(Path.cwd().parent.parent)#获取当前目录的父目录的父目录(绝对路径)路径拼接:

直接拼接需要的文件或路径(使用层级符号:/ )

注意!这里面的 / 符号,并不是传统意义上字符串路径上的【斜杠】或者【反斜杠】,它代表的是一个层级

比如当前目录父目录下面有一个test.xlsx的文件,我们用层级符号来获取

file=Path.cwd().parent/'test.xlsx'#获取当前目录的父目录下test.xlsx文件

同样的,比如父目录下面还有2个文件夹:P1和P2,其中P1下面有文件a.txt, P2下面有b.txt

那么我们如何在当前目录来表示a.txt,和b.txt的路径呢?

file=Path.cwd().parent/'P1'/'a.txt'#获取当前目录父目录下P1文件夹下a.txt文件file=Path.cwd().parent/'P2'/'b.txt'#获取当前目录父目录下P2文件夹下b.txt文件

看到没,使用层级符号 / 可以很容易表目录层级逻辑,也符合我们的生活习惯,从此再复杂的路径我们都可以用它来表示,无需用很多join()来重复拼接,我们只需要将路径拆分为一个个小单元,然后用层级符号来进行定位即可

层级符号也可以配合变量使用

配合变量使用这样会让它更强大,比如我们再创建日志目录时,需要每天产生不同的日期来进行存储日志

例:

importdatetimefrompathlib2importPathnowdate=datetime.datetime.now().strftime('%Y年%m月%d日%H时%M分%S秒')reportFile=Path.cwd().parent/nowdate

其中的nowdate为时间变量,这样我们在当前目录父母下面按照时间去创建了一个时间文件,用来存储日志相关

使用了层级符号后,便告别了传统字符串路径中的斜杠或者反斜杠,且表达更人性化,易读

文件的一些其他操作(常用):file=Path.cwd().parent/'test.xlsx'#获取当前目录的父目录下test.xlsx文件print(file.name)#获取文件名print(file.suffix)#获取文件扩展名print(file.stem)#获取扩展名前缀print(file.with_name('aaa.py'))#用aaa.py替换原文件名称,并生成绝对路径print(file.with_suffix('.txt'))#用.txt替换原扩展名.py,并生成绝对路径

当然这是pathlib2中比较常见路径相关的操作,还有一些其他的操作,详细可见官方文档,欢迎讨论和交流。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...有还,换了另一个支付宝账号,以前的借呗的钱会不会被移动扣?_百度知 ... 哪些是主板型号 哪些是主板型号的 在北京工作三年了,由于平常压力比较大,一直掉头发,怎么改善啊?谢谢! 精神压力大是不是更容易掉发 日常如何预防脱发 我身体素质很差当兵会怎么样?我做俯卧撑只能做几个。 本人姓余,想中间取个博字后面加个什么字好听,男孩。五行缺木_百度... ...的男孩,五行缺木,爸爸姓马,妈妈姓孟,取名马博林可以吗 为什么我这两年变得不喜欢笑,就算觉得好笑也笑不出来了,以前是自己都会... 为什么有时候我会哭着哭着就会笑了没有人逗我笑是自然而然的笑 67. Python的绝对路径 N78是否翻新的鉴定 手机高手请进 我的手机N78{心机},突然就坏了,状态是:早上醒来要看时间的时候屏幕上是... 怎么样区别诺基亚n78,n79手机是翻新机或者水货? 1990年农历正月初三按易经上是属啥的? 手机出毛病好像是中毒了诺基亚N78 九零年一月初三是什么星座 用什么软件检测手机 打扰您是什么意思? ...电脑会不会坏啊? 就怕电脑表面看不出其实里面坏了! 急求:怎样让手机自然损坏?谢谢 如何让手机看起来像自然损坏大神们帮帮忙 快速让手机自然损坏的方法!! 如何让手机自然损坏 怎样让手机假装坏了? 假装手机坏掉的方法有哪些? 怎么让别人知道手机坏了? 怎么让手机坏了呢? 怎么才能假装手机坏了不开机呢? 手机怎么让对方以为坏了不能接电话呢? python的文件操作标准库pathlib和pathlib2之间的区别是什 樱桃幼芽掰掉了可以直接接上去吗? 樱桃树修剪时间和方法,樱桃的功效与作用 短期借款包括什么 哪些属于短期借款 “闫”拼音怎么读 【IMIS】信息组织InfoOrganization 关于巴金的《星》这篇文……高手进 wincc7.0客服机怎么无权读取服务器 如何做好居家隔离的家庭消毒 七星彩网投平台推荐 霍城县七星公司广河大厦拖欠工资不给怎么办 光驱怎样打开并使用 高中毕业当海员,听说挣钱很多,想听听有经验的前辈的指点? 山东佛山在哪里 我是2011届的高中毕业,想去当兵和海员之间选一个,请问哪一个比较好... 我今年刚高中毕业,考的不好,不想复读,听说海员工资高,想去做海员,不知... 深圳光启集团做什么的 高中毕业可以当高级海员吗? 我今年高中毕业,英语不错,想上大专以后出来后当海员,请问以后待遇会怎样...