编程语言
首页 > 编程语言> > python-pathlib

python-pathlib

作者:互联网

python-pathlib

老式的os.path用法主要是函数形式,返回的数据类型通常是字符串。但是路径和字符串并不等价,所以在使用 os 操作路径的时候常常还要引入其他类库协助操作。新用法是面向对象,处理起来更灵活方便。

可以在不同系统进行路径操作, 文件路径分为 非实体路径和实体路径。

pathlib

基本操作

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 path

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()


pathlib案例

统计文件个数

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)

标签:返回,python,pathlib,path,Path,os,目录
来源: https://www.cnblogs.com/tian777/p/14908988.html