路径操作模块
3.4版本之前
- os.path模块
from os import path p = path.join('/etc', 'sysconfig', 'network') print(type(p), p) print(path.exists(p)) print(path.split(p)) print(path.abspath('.')) p = path.join('d:/', p, 'test.txt') path.dirname(p) path.basename(p) path.splitdrive(p)
3.4版本之后
建议使用pathlib模块,提供Path对象来操作。包括目录和文件
pathlib模块
- from pathlib import Path
目录操作
初始化
p = Path()
p = Path('a', 'b', 'c/d')
路径拼接和分解
- 操作符
Path对象 / Path对象 Path对象 / 字符串 或者 字符串 / Path对象
- 分解
- parts属性,可以返回路径中的每一个部分
-
- joinpath(*other)
- 连接多个字符串到Path对象中joinpath
获取路径
- str 获取路径字符串
- bytes 获取路径字符串的bytes
父目录
- parent 目录的逻辑父目录
- parents 父目录序列,索引父,其他是爷爷辈
name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)
- name 目录的最后一个部分
- suffix 目录中最后一个部分的扩展名(后缀)
- stem 目录最后一个部分,没有后缀
- suffixes 返回多个扩展名列表
- with_suffix(suffix) 补充扩展名到路径尾部,返回新的路径,扩展名存在则无效
- p.with_suffix(‘.txt’),txt前必须有点,否则会报错
- with_name(name) 替换目录最后一个部分,并返回一个新的路径
其他操作
- cwd()
- 返回当前工作目录
- home()
- 返回当前家目录
- is_dir()
- 是否是目录
- is_file()
- 是否是文件
- is_symlink()
- 是否是软链接
- is_socket()
- 是否是socket文件
- is_block_device()
- 是否是块设备
- is_char_device()
- 是否是字符设备
- is_absolute()
- 是否是绝对路径
- resolve()
- 返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软链接则直接被解析
- absolute()
- 也获取绝对路径,但是推荐使用resolve()
- exists()
- 目录或文件是否存在
- rmdir()
- 删除空目录,几乎不用
- touch(mode=0o666, exist_ok=True)
- 创建一个文件
- as_uri()
- 将路径返回成URI,例如
'file:///etc/passwd'
- 将路径返回成URI,例如
- mkdir(mode=0o777, parents=False, exist_ok=False)
- parents,是否创建父目录
- True,等同于
mkdir -p
- False,父目录不存在,则抛出FileNotFoundError
- True,等同于
- exist_ok
- 在3.5版本加入
- False,路径存在,抛出FileExistsError
- True,FileExistsError被忽略
- parents,是否创建父目录
- 迭代当前目录iterdir()
p /= 'a/b/c/d'
等价于p = p / 'a/b/c/d'
- 遍历,并判断文件类型,如果是目录,判断其是否为空
for x in p.parents[len(p.parents)-1].iterdir(): print(x,end='\t') if x.is_dir(): flag = False for _ in x.iterdir(): flag = True break print('dir','Not Empty' if flag else 'Empty',sep='\t') elif x.is_file(): print('file') else: print('other file')
通配符
- glob(pattern) 通配给定的模式
- rglob(pattern) 通配给定的模式,递归目录
p = Path('d:/test')p.glob('p*') # 生成器list(p.glob('p*')) # 返回当前目录对象下的p开头的文件list(p.glob('*/p*')) # 返回当前目录的下一级目录对象下的p开头的文件list(p.glob('**/p*'))# 递归所有目录,等同rgloblist(p.rglob('*p'))
- 返回当前目录的下一级目录对象下的p开头的文件
- 返回当前目录的下一级目录对象下的p开头的文件
匹配
- match(pattern)
- 模式匹配,成功返回True
文件操作
- Path.open(self, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None)
- 使用方法类似内建函数open,返回一个文件对象
-
- read_bytes()
- 以
rb
读取路径对应文件,返回二进制流
- 以
- read_text(encoding=None, errors=None)
- 以
rb
读取路径对应文件,返回二进制流
- 以
- Path.write_bytes(data)
- 以
wb
方式写入数据到路径对应文件
- 以
- write_text(data, encoding=None, errors=None)
- 以
wb
方式写入数据到路径对应文件
- 以
- 上面的可以看源码理解,有时候比看帮助文件简单3.5新增加的函数
from pathlib import Path p = Path('d:/test.py') p.write_text('hello everyone') print(p.read_text()) with p.open() as f: print(f.read(5))
- read_bytes()
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88093