老式的os.path用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。
可以在不同系统进行路径操作, 文件路径分为 非实体路径和实体路径。
from pathlib import Path p=Path(r"D:\ENNEW\OCR") Path.cwd() # 返回当前目录 Path.home() # 返回用户主目录 Path.cwd().parent # 上级(父)目录 Path.stat() # 返回指定路径的相关信息 # parents是一个迭代器,每调用一次,目录向上一次。 for p in current_path.parents: 遍历得到整个父目录 print(p) Path.iterdir() # 返回 Path 目录文件夹下的所有文件,返回的是一个生成器类型。 [x for x in p.iterdir() if x.is_dir()] 列出目录下的子目录 获得目录的不同部分 Path.resolve() # 返回绝对路径
name_path=Path(path, 'file1.txt') newpath=Path(path).joinpath ('file1.txt') Path('/') / Path('home') / 'dongwm/code'
Path.name # 返回文件名,包括后缀 Path.parent # 返回上级(父)目录 Path.parents # 返回上级(父)迭代器 Path.stem # 返回文件名,不包含后缀 Path.suffix # 返回后缀扩展名 Path.suffixes # 返回后缀扩展名列表 Path.anchor # 返回磁盘符 Path.with_name() # 替换文件名 Path.with_suffix() # 替换扩展名 Path.resolve() # 返回绝对路径 Path.relative_to(path) # 返回相对路径 filepath=Path('D:/tzxw/abc.png') filepath.name # abc.png filepath.parent # D:/tzxw filepath.stem # abc filepath.suffix # .png filepath.suffixes # ['.png'] filepath.with_name('123.png') # /tzxw/123/png filepath.with_siffix('.jpg') # /tzxw/abc.jpg filepath.anchor # D:/ Path.resolve() # D:/tzxw/abc.png
Path.mkdir() # 创建给定路径的目录。 Path.rmdir() # 删除该目录,目录文件夹必须为空 Path.touch() # 创建指定类型的
DIR_PATH = pathlib.Path('D:/tzxw/abc.txt') with DIR_PATH.open("r") as fs: data = fs.read() print(data) ----------------- .read_text(): 以 encoding指定的编码方法读取,读成str格式。等同open操作文件的"r"格式。 .read_bytes(): 读取字节流的方式。等同open操作文件的"rb"格式。以二进制方法 .write_text(): 文件的写的操作,等同open操作文件的"w"格式。 .write_bytes(): 文件的写的操作,等同open操作文件的"wb"格式。
Path.iterdir() # 返回 Path 目录文件夹下的所有文件,生成器类型。 Path.glob(model) # 返回 Path 目录文件夹下所有与 model 匹配的文件,返回的是一个生成器类型。 Path.rglob(model) # 返回 Path 路径下所有子文件夹中与 model 匹配的文件,返回的是一个生成器类型。 Path.match(model) # 返回 Path 路径下与 model 是否匹配,返回的是bool。 PY=[x for x in p.glob('*.py')] # 搜索出指定目录 print(PY)
# 使用 Path.iterdir() 获取当前文件下的所有文件,并根据后缀名统计其个数。 import pathlib from collections import Counter currentPath = pathlib.Path.cwd() gen = (i.suffix for i in currentPath.iterdir()) print(Counter(gen))
os and os.path pathlib os.path.abspath() Path.resolve() os.chmod() Path.chmod() os.mkdir() Path.mkdir() os.rename() Path.rename() os.replace() Path.replace() os.rmdir() Path.rmdir() os.remove(),os.unlink() Path.unlink() os.getcwd() Path.cwd() os.path.exists() Path.exists() os.path.isdir() Path.is_dir() os.path.isfile() Path.is_file() os.path.join() PurePath.joinpath()
import pathlib from collections import Counter now_path = pathlib.Path.cwd() gen = (i.suffix for i in now_path.iterdir()) print(Counter(gen)) gen =(p.suffix for p in pathlib.Path.cwd().glob('*.py')) print(Counter(gen))
def tree(fpath): print(f'+ {fpath}') for path in sorted(fpath.rglob('*')): depth = len(path.relative_to(fpath).parts) spacer = ' ' * depth print(f'{spacer}+ {path.name}')
import pathlib now_path = pathlib.Path.cwd() from datetime import datetime time, file_path = max((f.stat().st_mtime, f) for f in now_path.iterdir()) print(datetime.fromtimestamp(time), file_path)