好了,废话不多说,直接开始pathlib模块的讲解吧!在使用之前,需要提前导入pathlib库。
from pathlib import Path
最重要的Path对象
Path对象是这个库的核心,里面有着超级多好用的文件、文件夹处理方法,供我们调用。
① 当前路径下的Path对象
p = Path.cwd()
p
结果如下:
WindowsPath('C:/Users/Administrator')
② 任意指定路径下的Path对象
p = Path('C:/Users/Administrator/Desktop/python三剑客/pathlib库/抽奖.txt')
p
结果如下:
WindowsPath('C:/Users/Administrator/Desktop/python三剑客/pathlib库/抽奖.txt')
从上图可以看出,Path对象既可以是一个文件对象,也可以是一个文件夹对象。根据不同对象,调用相应方法,就可以很便捷的处理文件或文件夹。
获取文件的具体信息
我们既然针对某个文件操作,所以首先应该获取到文件的Path对象。
p = Path("抽奖.txt")
p.stat()
结果如下:
os.stat_result(st_mode=33206, st_ino=3377699720953729, st_dev=43058258, st_nlink=1,
st_uid=0, st_gid=0, st_size=84, st_atime=1701415115, st_mtime=1699522087,
st_ctime=1678864058)
路径拼接
进行路径拼接,直接使用一个/斜杠即可。
p = Path('C:/Users/Administrator/Desktop/python三剑客')
p1 = p/'pathlib库'
p1
结果如下:
WindowsPath('C:/Users/Administrator/Desktop/python三剑客/pathlib库')
获取上级目录
p = Path.cwd()
p.parent
p.parent.parent
结果如下:
WindowsPath('C:/')
获取文件的具体信息
我们先获取到文件的Path对象。
p = Path("抽奖.txt")
p.stat()
结果如下:
os.stat_result(st_mode=33206, st_ino=3377699720953729, st_dev=43058258, st_nlink=1, st_uid=0, st_gid=0, st_size=84, st_atime=1701415115, st_mtime=1699522087, st_ctime=1678864058)
获取指定路径下所有文件/文件夹的路径信息
以当前工作目录为例:在当前工作目录下,有下方这些文件。
C:\Users\Administrator\#04A50706.jpg
C:\Users\Administrator\#3F865C4C.xls
C:\Users\Administrator\#E7DA92A6.pptx
C:\Users\Administrator\#FC5B32A2.doc
C:\Users\Administrator\$118C6C9A.pptx
C:\Users\Administrator\$53D530AB.doc
如何获取每个文件对应的路径信息呢?
p = Path.cwd()
for i in p.iterdir():
print(i)
结果如下:
C:\Users\Administrator\#04A50706.jpg
C:\Users\Administrator\#3F865C4C.xls
C:\Users\Administrator\#E7DA92A6.pptx
C:\Users\Administrator\#FC5B32A2.doc
C:\Users\Administrator\$118C6C9A.pptx
C:\Users\Administrator\$53D530AB.doc
注意: iterdir()方法返回的是直接子文件或子文件夹【不考虑嵌套文件夹中的文件】。
获取指定路径下"符合条件"文件的路径信息
仅想要获取直接子文件的路径信息,使用的是glob()方法。
p = Path.cwd()
file_list = p.glob('*.mp4')
for file in file_list:
print(file)
结果如下:
C:\Users\Administrator\20230522_152840.mp4
C:\Users\Administrator\20230602_173826.mp4
C:\Users\Administrator\20230628_164942.mp4
C:\Users\Administrator\20230905_171401问题解答.mp4
C:\Users\Administrator\20230907_160018.mp4
C:\Users\Administrator\20230908_164218.mp4
C:\Users\Administrator\20230908_170324.mp4
C:\Users\Administrator\20230908_173441fulpage_比图.mp4
C:\Users\Administrator\20230911_150508.mp4
C:\Users\Administrator\20230913_091327.mp4
由于需求改变,我不仅想要获取直接子文件的信息,而且还要递归所有文件夹,找到所有符合条件的文件信息?这里有两种办法:
① 方法一
p = Path.cwd()
file_list = p.glob('**/*.txt')
for file in file_list:
print(file)
② 方法二
p = Path.cwd()
file_list = p.rglob('*.txt')
for file in file_list:
print(file)
综上所述:
Ⅰ 不考虑嵌套文件夹中的文件,使用glob()方法;
Ⅱ 考虑嵌套文件夹中的文件,使用rglob()方法;
限制递归次数,访问嵌套文件夹
如果你有一个嵌套文件夹,嵌套次数很深。但是我们并不需要一直访问到最后一层,应该怎么办呢?
① 不限制递归次数
p = Path.cwd()
file_list = p.rglob('*.txt')
for file in file_list:
print(file)
② 限制递归次数
p = Path.cwd()
file_list = p.rglob('*.txt')
for i,file in enumerate(file_list):
if i <= 2:
print(file)
判断当前路径是否存在某个文件或者文件夹
这个需求很有用,比如我们做文件分类的时候,我们需要创建新的文件夹,用于存放文件。此时,我们需要判断,创建的文件夹是否是不存在的,只有不存在,我们才去创建这个文件夹。
p = Path.cwd()
for i in p.iterdir():
print(i)
如果有这么些文件,如何判断文件或文件夹,是否存在呢?
r1=Path("C:/Users/Administrator/book.txt").exists()
r2=Path("C:/Users/Administrator").exists()
False
True
创建文件夹
上面我们如果已经判断了不存在b这个文件,那现在我们就来创建它。
p = Path.cwd()
p1 = p/'b'
if not Path('C:/Users/Administrator/Desktop/python三剑客/pathlib库/b').exists():
p1.mkdir()
上述我们已经为大家创建了单个文件夹,现在我们来创建一个递归文件夹,这里一定要使用parents=True参数。
p = Path.cwd()
p1 = p/'嵌套第一层'/'嵌套第二层'
p1.mkdir(parents=True)
判断某个路径是文件,还是文件夹
p = Path('C:/Users/Administrator/Desktop/python三剑客/pathlib库/抽奖.txt')
p.is_dir()
p.is_file()
文件/文件夹重命名
p = Path('3.gif')
p.rename("重命名_3.gif")
获取文件的文件名和后缀
这个功能真的很赞,超级好用。
p = Path('C:/Users/Administrator/Desktop/python三剑客/pathlib库/抽奖.txt')
p.name
p.suffix