(小甲鱼python)文件永久存储(中)总结 路径处理 pathlib–面向对象的文件系统路径 绝对路径vs相对路径(路径查询、路径修改、查找功能)
创始人
2024-06-03 14:20:51
0

一、基础复习

上节课回顾:
1.文件永久存储(上) python文件永久存储(创建打开文件、文件对象的各种方法及含义)

二、路径处理

windows系统使用反斜杠\作为路径分隔符。其他系统使用多使用斜杠

1.路径处理
pathlib – 面向对象的文件系统路径
pathlib 是 Python3.4 之后新添加的模块,它可以让文件和路径操作变得快捷方便,完美代替 os.path 模块。

pathlib该模块提供了用于表示文件系统路径的类,适用于不同的操作系统。路径类被分为提供纯计算操作而不涉及 I/O 的 PurePath,以及从纯路径继承而来但提供 I/O 操作的 Path。

旧版路径: 新旧路径处理模块大比拼(pathlib vs os.path)
常用命令如下:

  • cwd() 获取当前目录的路径
  • is_dir 判断一个路径是否为一个文件夹
  • is_file() 判断一个路径是否为一个文件
  • exists() 检测一个路径是否存在
  • name 获取路径的最后一个部分
  • stem 获取文件名
  • suffix 获取文件后缀
  • parent 获取父级目录
  • parents 获取逻辑祖先路径构成的序列
  • parts 将路径的各个组件拆分元组
  • stat() 查询文件或文件夹的信息

例1:

>>> from pathlib import Path
>>> Path.cwd()  # 获取当前目录的路径
WindowsPath('E:/python')
>>> p = Path('E:/python')  # 路径刚到p变量里面去
>>> p
WindowsPath('E:/python')
>>> q = p / "FishC.txt"  # 使用斜杠进行路径拼接,将文本文件FishC.txt加入路径。
>>> q
WindowsPath('E:/python/FishC.txt')  
>>> 

例2:

>>> p.is_dir()  # 判断一个路径是否为一个文件夹
True
>>> q.is_dir()
False
>>> p.is_file()  # 判断一个路径是否为一个文件
False
>>> q.is_file()
True
>>> p.exists() # 检测一个路径是否存在
True
>>> p.exists()
True
>>> Path("C:/404").exists()  # 路径不存在时报错。
False

例3:

>>> p.name         # 获取路径的最后一个部分
'python'
>>> q.name
'FishC,txt'
>>> p.parent         # 获取父级目录
WindowsPath('E:/')
>>> q.parent
WindowsPath('E:/python')
>>> ps=p.parents    # parents为获取逻辑祖先路径构成的序列,将其赋给变量ps
>>> for each in ps:print(each)E:\

我python路径为E:\python,路径比较短,下面图片中的路径为遍历路径后得到的结果。
代码注释:
变量ps也支持索引,ps[0]为父级目录,减掉一级之后就是ps[1],减掉两级就是ps[2]等等。
在这里插入图片描述

p.parts 将路径的各个组件拆分元组
p.stat() 查询文件或文件夹的信息
代码注释:
p.stat().st_size 指的是一个文件的尺寸大小为4096字节,即4kb。
q.stat().st_size 文件是空的,因此大小为0
在这里插入图片描述2.绝对路径 vs 相对路径(路径查询)

绝对路径:文件绝对存在的路径,如果一个路径从根目录开始,然后一级一级地指向最终的文件或者文件夹,那么这个路径就是绝对路径。比如这里的p和q都是绝对路径。
相对路径:是以目录作为基准,进行一级一级的这个目录推导的一个路径,我们使用点来表示当前所在的目录,使用两个紧挨着的点来表示上一级目录。

  • resolve() 将相对路径转换为绝对路径。
  • iterdir() 获取当前路径下所有子文件和子文件夹。
  • mkdir() 创建文件夹。
  • open() 打开文件。
  • rename() 修改文件或文件夹的名字
  • replace() 替换指定的文件夹或文件夹。
  • rmdir() 删除文件夹 unlink() 删除文件
  • glob() 功能强大的查找功能

例4:相对路径

>>> from pathlib import Path
>>> Path("./doc") # 表示相对路径,表示当前路径下的doc这个文件夹
WindowsPath('doc')
>>> Path("../FishC") # 使用两个紧挨着的点来表示上一级路径。
WindowsPath('../FishC')
>>> 

例5:

>>> Path("./doc").resolve()  # 将相对路径转换为绝对路径
WindowsPath('E:/python/Doc')
>>> Path("../FishC").resolve()
WindowsPath('E:/FishC')

例6:

>>> p = Path('E:/python')
>>> q = p / "FishC,txt"
>>> p.iterdir()  # 得到了一个生成器

>>> for each in p.iterdir():   # 获取当前路径下所有子文件和子文件夹。print(each)E:\python\DLLs
E:\python\Doc
E:\python\FishC,txt
E:\python\FishC.txt
E:\python\include
E:\python\Lib
E:\python\libs
E:\python\LICENSE.txt
E:\python\NEWS.txt
E:\python\python-3.7.3-amd64.exe
E:\python\python.exe
E:\python\python3.dll
E:\python\python37.dll
E:\python\pythonw.exe
E:\python\Scripts
E:\python\tcl
E:\python\Tools
E:\python\vcruntime140.dll

例7:
将当前路径下的**文件(注意是文件不是文件夹)**整理成一个列表,

>>> [x for x in p.iterdir() if x.is_file()]  # 收集文件是is_file(),收集文件夹用is_dir()
[WindowsPath('E:/python/FishC,txt'), WindowsPath('E:/python/FishC.txt'), WindowsPath('E:/python/LICENSE.txt'), WindowsPath('E:/python/NEWS.txt'), WindowsPath('E:/python/python-3.7.3-amd64.exe'), WindowsPath('E:/python/python.exe'), WindowsPath('E:/python/python3.dll'), WindowsPath('E:/python/python37.dll'), WindowsPath('E:/python/pythonw.exe'), WindowsPath('E:/python/vcruntime140.dll')]

3.绝对路径 vs 相对路径(路径修改)
例8:

>>> n = p / "FishC"
>>> n.mkdir()  # 创建文件夹
>>> n.mkdir()   # 已有文件夹再次创建会报错
Traceback (most recent call last):File "", line 1, in n.mkdir()File "E:\python\lib\pathlib.py", line 1251, in mkdirself._accessor.mkdir(self, mode)
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'E:\\python\\FishC'
>>> n.mkdir(exist_ok=True) # 加上exist_ok=True,尽管文件已有但不会报错

例9:
FishC里面创建了多个多个文件夹A、B、C。

>>> n=p / "FishC/A/B/C"  # 如果路径中有多个不存在的父级目录,也会报错
>>> n.mkdir(exist_ok=True)
Traceback (most recent call last):File "", line 1, in n.mkdir(exist_ok=True)File "E:\python\lib\pathlib.py", line 1251, in mkdirself._accessor.mkdir(self, mode)
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'E:\\python\\FishC\\A\\B\\C'
>>> n.mkdir(parents=True,exist_ok=True)  # 为了解决上述情况,将parents设置为true
>>>

例10:

>>> f=n.open("w")
>>> f.write("I love FishC.")
13
>>> f.close()
>>> n.rename("NewFishC.txt")  # 修改文件或文件夹的名字,只修改名字没有修改路径,文件会到python大本营路径下
>>> m=Path("NewFishC.txt")
>>> m
WindowsPath('NewFishC.txt')
>>> n
WindowsPath('E:/python/FishC/A/B/C/FishC.txt')
>>> m.replace(n) # 替换指定的文件夹或文件夹。

例11:
rmdir() 删除文件夹
unlink() 删除文件

>>> n.parent.rmdir()  # 删除FishC下的C文件夹,文件夹不为空时不会随意删除,因此报错。
Traceback (most recent call last):File "", line 1, in n.parent.rmdir()File "E:\python\lib\pathlib.py", line 1295, in rmdirself._accessor.rmdir(self)
OSError: [WinError 145] 目录不是空的。: 'E:\\python\\FishC\\A\\B\\C'
>>> n.unlink() # 删除C文件夹下的文件
>>> n.parent.rmdir()  # 删除后,跳回到B文件夹。

4.绝对路径 vs 相对路径(查找功能)
例12:

>>> p=Path('.')  # 相对目录,点'.'就是python大本营。
>>> p.glob("*.txt")  # 功能强大的查找功能,查找当前文件夹下所有以.txt为后缀的文件。

>>> list(p.glob("*.txt"))  # 变成一个列表的形式输出
[WindowsPath('FishC.txt'), WindowsPath('LICENSE.txt'), WindowsPath('NEWS.txt')]

代码注释:
list(p.glob(“/.py”)) 查找当前目录中的所有.py后缀的文件,有68行,这里不展开
list(p.glob(“**/*.py”)) 查找当前目录以及该目录下面的所有子目录,可以使用两个星号 **来表示,一共1562行。
在这里插入图片描述

相关内容

热门资讯

小仓鼠在笼子里一动不动的是怎么... 小仓鼠在笼子里一动不动的是怎么回事?小仓鼠应该是生病了,建议尽快处理,找兽医看看,他们最专业。目前应...
扬州何园的寻访感受 扬州何园的寻访感受 你好,请参考: 初见何园,似乎有种似曾相识的感觉,或许意识到这种想...
童年傻事作文---速来 童年傻事作文---速来童年傻事 童年是多么美好,童年的生活令人向往,童年的天空总是那么蓝,而童...
家庭幽默大赛老韩头一家幽默服装... 家庭幽默大赛老韩头一家幽默服装秀家庭幽默大赛老韩头一家幽默服装秀这都被他看出来了  今天晒内裤了,室...
乐器名称 乐器名称我在小提琴协奏曲《梁祝》的视频里这种乐器不知叫什么名字,请懂音乐和乐器的朋友给予解答,谢谢。...
电视剧《老马家的幸福往事》中的... 电视剧《老马家的幸福往事》中的马鸣和徐丽娜在马鸣的大学里的图书馆里偷书时用留声机听的歌是什么名字的请...
流鬼的介绍 流鬼的介绍 流鬼,是古代民族,分布在今俄罗斯勘察加半岛,有数万人。
请问为爱所困火吗 请问为爱所困火吗一般般。爱情偶像剧。此剧上一年开播,还上了微博热搜榜我认为很火,为爱所困第二部还有不...
什么是手诊 什么是手诊手诊的概念就是指通过人体手的纹路形态、变化、规律等方式,对人体器官的演变作出推理的一种防治...
双子星公主法和希的有几集,第一... 双子星公主法和希的有几集,第一部第二部都要,如果知道第三部也透露一点,请求不要编,法和希最后怎样了拜...
王熙凤简介 王熙凤简介《红楼梦》中人物,贾琏之妻,王夫人的内侄女。长着一双丹凤三角眼,两弯柳叶吊梢眉,身量苗条,...
大学生应从哪些方面进行自我探索 大学生应从哪些方面进行自我探索兴趣、能力、价值观、性格,这四个是最主要的方面,其中价值观是核心
谁有好看的卡通人物的电脑背景! 谁有好看的卡通人物的电脑背景!卡通人物的背景要清色! 看得清 要男生的 我有Clannad主题...
幼儿园小班孩子座位固定好还是经... 幼儿园小班孩子座位固定好还是经常换好?我家孩子座位老换,我觉得不好,大家觉得呢?... 我家孩子座...
我的爸爸的作文 我的爸爸的作文我的父亲 人们常说父爱如山,可在我看来,我的父亲对我的爱,并非完全如山那样严峻,有时却...
潘朵拉之心第二季动漫什么时候出 潘朵拉之心第二季动漫什么时候出动画只出了第一季 没有要出第二季的消息 可能性估计很小目前漫画还在连载...
时不我待是什么意思 时不我待是什么意思时不我待的意思是时间不等待人,要抓紧时间,不要虚度光阴。出处:日月逝矣,岁不我与。...
葫芦小金刚里大娃怎么被抓的 葫芦小金刚里大娃怎么被抓的掉泥潭被捉的
有一部小说叫穿越千年来爱你还是... 有一部小说叫穿越千年来爱你还是什么的有一部小说叫穿越千年来爱你还是什么的内容讲的是一个女的在路上走着...
火影忍者力 米娜是红眼吗 火影忍者力 米娜是红眼吗红眼?首先这几集是原创,非岸本创作。在岸本的剧情结构里面只有木叶白眼、写轮眼...