2019/10/22 04-Path对象基本操作

对于目录操作想类似面向对象的方式,python在3.4之后提供了pathlib模块在这里插入图片描述
会根据当前操作系统来创建目录类型,.点表示当前路径,这就是一个创建对象的过程
跟创建一个列表 l=list()一个道理
得到路径对象就可以进行操作

在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个就相当于当前路径,前面是什么类型才能调用什么类型的方法,比如f。read,f.write
在这里插入图片描述
没有跟代表相对的
在这里插入图片描述
分隔符给你纠正回来了
在这里插入图片描述
如果在前面加上斜杠,相当于当前路径的a目录下的b,但是在linux就是从根目录开始
在这里插入图片描述
这样创建起来很方便,连join都省去了
在这里插入图片描述
刚才无参代表当前路径,这样也代表当前路径
在这里插入图片描述在这里插入图片描述
刚才无参代表当前路径,这样也代表当前路径,.点空字符串,什么都不写都是当前路径在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

p代表路径/‘c’,这样看起来像除法,这个叫运算符的重载,原来是除法,p是个路径类path类,用/做运算符重载,让它变成路径拼接
用/来跟字符串进行拼接

在这里插入图片描述在这里插入图片描述在这里插入图片描述
**后面加个括号就可以避免,后面的字符串和路径对象+在一起还是返回的路径对象
**
在这里插入图片描述
按照从左至右的规律,字符串除法是不存在的
在这里插入图片描述在这里插入图片描述=在这里插入图片描述
在这里插入图片描述
这种是生成一个新的,再赋值在这里插入图片描述
相当于就地直接修改

在这里插入图片描述
以前可能比较老,用os.path模块,用path里面的一系列方法去处理,但是如果要用3.0,一般都是3。5以上的版本,就可以使用这种方式 了(2.7应该也有,因为好用的都更新到2.7了)
建议使用pathlib

在这里插入图片描述
在这里插入图片描述
分解成两个元组在这里插入图片描述
是path对象就可以追加,返回的依然是个路径对象,操作起来非常方便
在这里插入图片描述
这就是面向对象操作的好处,比os.path.操作起来方便很多在这里插入图片描述在这里插入图片描述
join.path是一个可变参数在这里插入图片描述
pathlib本质上是调用的os.path,但是更加方便
在这里插入图片描述
在这里插入图片描述
强类型,语言,不同类型的不能相加
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
一个按照bytes方式表达,一个按照string方式表达
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
如果不是用的bytes,用的是string,就需要+r来转义
在这里插入图片描述在这里插入图片描述
print打印等于在里面进行了强制类型转换,转成str 了在这里插入图片描述
os.path.dirname父路径的问题
在这里插入图片描述
没有了,因为是相对路径来走的
在这里插入图片描述
用绝对路径试试
在这里插入图片描述
在这里插入图片描述
依然是windows的路径类型
在这里插入图片描述
返回的是一个可迭代对象,是有顺序的,由近及远,相对路径到点为止
在这里插入图片描述
这个东西就不是列表
在这里插入图片描述
用parents就可以获得所有的父路径
在这里插入图片描述在这里插入图片描述
目录的组成部分
在这里插入图片描述
name就是基名,
stem主干就是去除尾部的扩展名.gz,
suffix后缀
在这里插入图片描述在这里插入图片描述
**有多级的扩展名可以用suffixes
stem+suffix=name,name=basename
parent就是这个文件的父路径
**
在这里插入图片描述把目录全拿到,等于parts,一个元组在这里插入图片描述
所谓的with_name是在做名称的替换
在这里插入图片描述
parent是b,等于把b换成abc了
是把一个路径的基名换掉

在这里插入图片描述
相当于把扩展名换掉
在这里插入图片描述
p3没有扩展名就就加上,没有就加上,有就替换
在这里插入图片描述
等于把p3下的test替换成xyz了
在这里插入图片描述
这样的话,知道父目录换后面的文件比较容易
在这里插入图片描述
还提供了一些东西,这个方法跟当前的路径对象没关系,但是属于路径对象才能够调用的方法
在这里插入图片描述
当前path是创建路径对象的类,这个方法是属于类型
(讲datetime的时候,有些方法是属于datetime创建的对象的,比如datetime.now是datetime类的方法,用时间类创建一个时间对象才能处理时间戳stamp)
当前工作路径跟你具体哪个路径没有关系,所以这种方法属于类的,但是在python中,类的方法在所有创建的对象都可以调用

在这里插入图片描述
还有个home,家目录在哪
在这里插入图片描述
linux是遵守posix协议的
在这里插入图片描述
linux可以感觉家目录跟当前目录是两个不同的东西
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
是不是目录,是不是文件
在这里插入图片描述
p1这个目录实际是不存在
在这里插入图片描述
如果这个路径所对应的文件不存在,判断就都失败了,要看存在不存在
在这里插入图片描述
linux下就能告诉你文件是什么类型,磁盘是块设备b
在这里插入图片描述
s是socket文件
在这里插入图片描述
返回一个包含绝对路径的对象
在这里插入图片描述
会返回解析之后d得到的路径
在这里插入图片描述
是个软链接,绝对路径,软链接类似windows快捷方式,但是毕竟是软链接文件,
absolute看到的是软链接本身位置
resolve如果发现自己是软链接,就解析,就是跟踪不跟踪软链接
在这里插入图片描述在这里插入图片描述
不存在就不知道是什么类型,不存在一定没有类型
在这里插入图片描述在这里插入图片描述在这里插入图片描述
创建一个文件,是以当前用户身份创建的在这里插入图片描述
创建文件无非就是read和write,用open方法即可,open方法打开就用w在这里插入图片描述在这里插入图片描述
open方法不操作路径只管文件打开的读写,pathlib路径操作的就必然用到
在这里插入图片描述在这里插入图片描述
touch如果文件在的话,就把时间戳修改一下
在这里插入图片描述在这里插入图片描述
两斜杠代表协议头后面从根文件路径/tmp/test1
在这里插入图片描述
windows需要这么写
在这里插入图片描述在这里插入图片描述在这里插入图片描述
找不到abcd这个目录
在这里插入图片描述
mkdir -p(指的是父目录)指的是缺什么祖先目录都创建出来
在这里插入图片描述
这时候目录就创建好了

在这里插入图片描述
再次执行,表示此目录已存在在这里插入图片描述
exist_ok代表这个东西存在就ok了,不告诉你了,这个参数是在3.5之后才有的
在这里插入图片描述在这里插入图片描述
目录也可以叫.txt在这里插入图片描述
只要你有权限,touch,mkdir,只要你的权限够,因为这个文件目录不允许你写入,你就创建不了,因为你没权限去写入,权限允许才创建成功,权限不允许是创建不成功的在这里插入图片描述
告诉你权限拒绝,跟操作系统的文件系统打交道一定要跟权限有关,所以部署的时候,你的服务你自己管,注意属主属组,windows一般上来就是admin权限
linux就不是

在这里插入图片描述
parents这个参数就类似mkdir -p,exist_ok,看存在的时候是否会报错

在这里插入图片描述在这里插入图片描述
返回的是生成器generator,代表惰性求值
在这里插入图片描述在这里插入图片描述
上面d下面没什么文件,当然不可以迭代
先构建一个tmp/a这个对象,然后就可以开始迭代了

在这里插入图片描述在这里插入图片描述
当你这个路径指向一个目录的时候,yield(代表生成器),生成一个path对象of它的内容
在这里插入图片描述
iterdir把你指定的路径,如果是个目录,可以把一个目录里面的所有内容迭代出来 ,. …点和点点是特殊的目录
.隐藏的文件也可以被打印出来
在这里插入图片描述
不是目录告诉你迭代什么
在这里插入图片描述
迭代目录很重要,找到目录,就有可能遍历目录中的所有内容,只把当前目录扫一遍,不递归,不往里面去

递归要函数,这里没用到递归,函数自己调用自己,或者间接调用叫递归,
在这里插入图片描述
parent-1,拿祖先是由近及远 的,这么拿返回的还是文件对象,这个文件对象去迭代
在这里插入图片描述在这里插入图片描述
取绝对路径的parents,这就是个集合,这个长度减-1,是支持的
但是直接给-1就不支持,内部实现就是类似一个可迭代对象,可迭代对象不支持负索引,没有实现

在这里插入图片描述
如果索引小于0则抛出index异常
在这里插入图片描述
绝对路径在linux里面最祖先都是跟/
在这里插入图片描述
拿到这个路径的跟之后进行迭代
在这里插入图片描述
如果是个相对路径,它的parents是.
在这里插入图片描述
当前路径tmp里面所有都打印出来了
在这里插入图片描述
不是所有的可迭代对象都支持,不是都支持负索引,因为还没算完,要一个给一个
不是什么可迭代对象都一定可以知道长度的,也不是所有的可迭代对象都支持负索引的

如果是目录就做事,是文件就打印是文件,如果是什么socket文件,就打印其他文件
目录进来就表示非空,就打印非空,进不来就是空
这个就是如何去判断是个目录还是个普通文件,遍历的时候发现目录就可以做一些事情,比如封装成函数递归调用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值