3.4以前的版本:
使用 os.path模块
from os import path
创建一个路径对象
p = path.join('/etc','sysconfig','network')
使用pash.split(p) 来切出大多数文件路径末尾的文件
将文件路径字符串化,使用 path.dirname(字符串路径赋值的变量 )就可以轻松的取出他的文件路径
将文件路径字符串化,使用 path.basename(字符串路径赋值的变量 )就可以轻松的取出他的基名
将文件路径字符串化,使用 path.splitdrive(字符串路径赋值的变量)就可以轻松的取出它所在的磁盘
3.4以后版本使用
pathlib模块,提供path对象来操作,包括目录和文件
from pathlib import Path #P为大写
目录操作
初始化目录
p=Path( ) #当前目录
p=Path('a','b','c/d') #当前目录下的a/b/c/d
p=Path('/etc') #根下的etc目录
路径的拼接和分解
操作符:
Path对象/Path对象
Path对象/字符串 or 字符串/Path对象
分解parts属性,返回路径中的每一个部分
joinpath(*other) 连接多个字符串到Path对象中
获取路径
p=Path('/etc')
str 获取路径字符串,bytes获取路径字符串的bytes
p = Path(str(p),bytes(p))
父目录:
parent目录的逻辑父目录
parents父目录序列,索引是直接的父目录
常用的一些路径操作命令
print(p.xxxx)
name目的最后一个部分
suffix 目录中最后一个部分的扩展名
stem目录的最后一个部分,没有后缀
suffixes 返回多个扩展名列表
with_suffix(suffix)补充扩展名到路径尾部,返回新的路径,扩展名若存在则无效
with_name(name) 替换目录最后一个部分并返回一个新的路径
p =path( )
p. xxx 对一个文件目录进行判断,这个目录必须 实实在在的存在才能判断否则是False
cwd( ) 返回当前工作目录
home( )返回当前家目录
is_dir()是否是目录
is_file( )是否是普通文件
is_sysmlink( ) 是否是软连接
is_sockert( )是否是socket文件
is_block_device( ) 是否是块设备
is_char_device( )是否是字符设备
is_absolute( )是否是绝对路径
resolve( )返回一个路径,这个新路径就是当前Path对象的绝对路径,软链接会被解析
absolute( )也可以获取绝对路径,但是推荐使用resolve( )
exists( )目录或文件是否存在
rmdir( )删除空目录,没有提供判断目录为空的方法
as_uri( )将路径返回成URI,例如'file://etc/passwd'
touch(mode=0o666,exit_ok=True)创建一个文件
mkdir(mode=0o777,parents=False,extist_ok=False)
parents,是否创建父目录,True创建,False不存在则报错,跟上exit_ok=bool参数,False:父目录路径存在报错,True:忽略这个错误,并不会提示
iterdir( ) 迭代当前目录
使用glob去一个文件对象里匹配指定的文件
glob(匹配对象) 通配给定的模式
rglob(匹配对象)通配给定的模式,递归目录等同于 (**/*.py)
可以搭配文件路径使用
举例:
Path( ' . ' ).glob (*.py )
在当前工作目录下查找后缀为.py的文件对象
Path( ' . ' ).glob (*/*.py )
在当前工作目录下查找后缀为.py的文件对象且至少有一级目录
匹配
match(pattern)
模式匹配,成功返回True
Path('a/b.py').match('b/*.py') #True
Path('a/b/c.py').match('a/*.py') #False
Path('a/b/c.py').match('a/*/*.py') #True
Path('a/b/c.py').match('a/**/*.py') #True
文件操作
open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)
使用方法类似内建函数open,返回一个文件对象
3.5增加的函数:
read_bytes() 以rb读取路径对应文键,并返回二进制流
read_text(encoding=None,errors=None)
以rt方式读取路径对应文件,返回文本
Path.write_bytes(data)
以wb方式写入数据到路径对应文件
write_text(data,encoding=None,errors=None)
以wt方式写入字符串到路径对应文件