____tz_zs笔记
os
文档: https://docs.python.org/3.6/library/os.html
os 模块提供了与系统、目录操作相关的功能,不受平台的限制
- os.path.exists() 方法用于检验文件或文件夹是否存在
- os.remove() 删除文件
- os.makedirs() 创建多层目录
- os.rmdir() 删除单级目录
- os.rename() 重命名文件
- os.path.isfile() 判断是否为文件
- os.path.isdir() 判断是否为目录
- os.path.join() 连接目录,如 path1 连接 path2 为 path1/path2
- os.path.splitext() 将文件分割成文件名与扩展名,如分割 tmp.txt 为 tmp 和 .txt
- os.path.basename() 返回文件的名称
pathlib
pathlib中的Path类可以创建path路径对象, 属于比os.path更高抽象级别的对象。
·
# -*- coding: utf-8 -*-
"""
@author: tz_zs
"""
import pathlib
# 用Path类可以创建path路径对象, 属于比os.path更高抽象级别的对象。
paths = pathlib.Path('D:/kaggle/stage1_train')
# Path.glob()过滤目录(返回生成器),注意此例中的文件夹结构
paths_glob = paths.glob('*/images/*.png')
for i in paths_glob:
print(i)
'''
D:\kaggle\stage1_train\00071198d059ba7f5914a526d124d28e6d010c92466da21d4a04cd5413362552\images\00071198d059ba7f5914a526d124d28e6d010c92466da21d4a04cd5413362552.png
D:\kaggle\stage1_train\003cee89357d9fe13516167fd67b609a164651b21934585648c740d2c3d86dc1\images\003cee89357d9fe13516167fd67b609a164651b21934585648c740d2c3d86dc1.png
...
'''
·
Path.suffix #文件后缀
Path.stem #文件名不带后缀
Path.name #带后缀的完整文件名
Path.parent #路径的上级目录
基本用法:
Path.iterdir() #遍历目录的子目录或者文件Path.is_dir() #判断是否是目录
Path.glob() #过滤目录(返回生成器)
Path.resolve() #返回绝对路径
/ # 拼接路径(目录中进行导航-官网说法)
Path.exists() #判断路径是否存在
Path.open() #打开文件(支持with)
Path.unlink() #删除文件或目录(目录非空触发异常)
基本属性:
Path.parts #分割路径 类似os.path.split(), 不过返回元组Path.drive #返回驱动器名称
Path.root #返回路径的根目录
Path.anchor #自动判断返回drive或root
Path.parents #返回所有上级目录的列表
改变路径:
Path.with_name() #更改路径名称, 更改最后一级路径名Path.with_suffix() #更改路径后缀
/ #拼接路径
Path.joinpath() #拼接路径
Path.relative_to() #计算相对路径
测试路径:
Path.match() #测试路径是否符合patternPath.is_dir() #是否是文件
Path.is_absolute() #是否是绝对路径
Path.is_reserved() #是否是预留路径
Path.exists() #判断路径是否真实存在
其他方法:
Path.cwd() #返回当前目录的路径对象Path.home() #返回当前用户的home路径对象
Path.stat() #返回路径信息, 同os.stat()
Path.chmod() #更改路径权限, 类似os.chmod()
Path.expanduser() #展开~返回完整路径对象
Path.mkdir() #创建目录
Path.rename() #重命名路径
Path.rglob() #递归遍历所有子目录的文件
目录树
from pathlib import Path
import sys
def lst_tree(p, n):
if p.is_file(): #判断是否是文件
print('|' + '\t|' * n + '-' * 4 + p.name)
elif p.is_dir(): # 判断是否是目录
print('|' + '\t|' * n + '-' * 4 + str(p.relative_to(p.parent)) + '\\')
for pt in p.iterdir():
lst_tree(pt, n + 1) # 递归
if __name__ == "__main__":
# 对命令行参数进行判断
if len(sys.argv) != 1 and Path(sys.argv[1]).exists():
lst_tree(Path(sys.argv[1]), 0)
else:
lst_tree(Path('.'), 0)
·
参考: