(小甲鱼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行。
在这里插入图片描述

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...