pathlib—— 面向对象的文件系统路径
它是python3.4新增的一个标准库,提供了不同操作系统下文件系统路径的操作方式,有两大类一个是纯路径不带I/0操作,另一个可以进行I/0的类。pathlib各个类的继承关系如下图:
一般情况,对pathlib不熟悉,用Path就够了,它功能足够强大,个人觉得与相比os.path相比,更加人性化。下文将介绍一些常见操作:
构建Path类路径对象
pathlib中不区分路径分隔符的,在win系统下可以直接用'/'。还可以用 / 创建子路径。感觉比直接字符串拼接和利用os.path.join()更加简洁
from pathlib import Path, PurePath
#直接传进一个完整字符串
p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#也可以传进多个字符串
p = Path('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
#也可以利用Path.joinpath()
p = Path('C:/Users/dongh/Documents).joinpath('python_learn/pathlib_/file1.txt')
#PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#利用 / 可以创建子路径
p = Path('C:/Users/dongh/Documents)
p = p / 'python_learn/pathlib_/file1.txt'
print(p)
#PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
了解对象基本情况
获取上一级路径
p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#获取路径上一级目录路径
print(p.parent)#pathlib_\folder1
#获取上上一级目录路径
print(p.parent.parent)
#结果
C:\Users\dongh\Documents\python_learn\pathlib_
C:\Users\dongh\Documents\python_learn
获取路径组件名字(返回的是字符串)
#获取当前路径文件名的后缀名
#获取当前路径文件名不带后缀
#获取-当前路径文件名带后缀
print(p.suffix)
print(p.stem)
print(p.name)#pathlib_\folder1
#获取上一级目录路径名字
print(p.parent.name)
#获取上上一级目录路径名字
print(p.parent.parent.name)
#结果
.txt
file1
file1.txt
pathlib_
python_learn
将路径分成不同组分(返回一个元组)
print(p.parts)
#('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
深入了解对象
哈哈,简单了解对象的是不够的~~~万一对象不存在呢
判断对象属性
#判断对象是否存在,存在返回True,反之返回False
p.exists()
#判断对象是否是目录,存在返回True,反之返回False
p.is_dir()
#判断对象是否是文件,存在返回True,反之返回False
p.is_file()
遍历文件夹下的路径
#p指向的是一个文件不是文件夹。它的上一级才是文件
for i in p.parent.iterdir():
print(i,)
"""
C:\Users\dongh\Documents\python_learn\pathlib_\file1
C:\Users\dongh\Documents\python_learn\pathlib_\file2
C:\Users\dongh\Documents\python_learn\pathlib_\folder1
C:\Users\dongh\Documents\python_learn\pathlib_\folder2
C:\Users\dongh\Documents\python_learn\pathlib_\folder3
C:\Users\dongh\Documents\python_learn\pathlib_\test.py
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
"""
有目的寻找
#* 表示匹配任意字符串,但这只能在当前目录下寻找
for i in p.parent.glob('*.txt'):
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
'''
#寻找当前路径的下一路径的内容
for i in p.parent.glob('*/*.txt'):
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
'''
#寻找当前路径下所有符合条件文件
#' ** '意思当前路径和它的所有子路径,相当于循环匹配一遍子路径
#和Path.rglob()效果一样
for i in p.parent.glob('**/*.txt'):#for i in p.parent.rglob('*.txt')
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\sub_folder1\sub_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
'''
对对象动点手脚
写入数据
#写入二进制数据
p.write_bytes(b'hello world!')
#写入文本
p.write_text('hello world!')
#打开文件可以发现文件内有'hello world!'。
读取数据
#读二进制数据
print(p.read_bytes())
#b'hello world!'
#读文本
p.read_text()
#'hello world!'
Path.open()和内置open()差不多
with p.open('r') as f:
print(f.read())
#hello world!
with p.open('w') as f:
f.write('hello again!')
给对象改个名字
p.rename('new_file.txt')
#原来的'file1.txt'被改成new_file.txt',文件内的内容不变。
创造新的路径
p.mkdir()
#将创建一个名为p.name的新文件夹。
p.rmdir()
#将删除这个文件夹,它必须是空的才能够删除
判断文件是否一样
print(p.samefile('file1.txt'))
#返回True
改变新的路径或后缀名并返回新的路径(原来的路径不被改变)
print(p.with_name('new_file1.txt'))
'C:/Users/dongh/Documents/python_learn/pathlib_/new_file1.txt'
print(p.with_suffix('.csv'))
'C:/Users/dongh/Documents/python_learn/pathlib_/file1.csv'
更多详细内容请查看python官方教程
其他文章
python制作字符表格
python爬取必应学术
python控制台动画