Python Path 路径

Python Path

Posted by BlueFat on Thursday, August 18, 2022

os.path

from os import path
# 拼接路径
p=path.join('/etc','sysconfig','network')

# 路径是否存在
print(path.exists(p))

# 分割 (元组: dirname和basename)
print(path.split(p))

# 路径和基名
print(path.dirname(p),path.basename(p))

# 当前路径
print(path.abspath(""),path.abspath('.'))

# windows
print(path.splitdrive('o:/tmp/test')) #windows

文件根目录

p1=path.abspath(__file__)  #父文件名路径
print(p1)
while p1 != path.dirname(p1):
    p1=path.dirname(p1)
    print(p1)

pathlib

python 3.4支持

from pathlib import Path
# 当前相对路径
print(Path(),Path(''),Path('.'))
. . .

# 路径
print(Path().cwd())
/Users/sunday/Code/MG2022/d23

#当前绝对路径
print(Path().absolute())
/Users/sunday/Code/MG2022/d23

# 路径拼接
print(Path('a')/'b/c')
a/b/c

# 父路径
p1=Path('/','a','b/c','',Path(''),Path('e/f'))
print(p1.parent)
/a/b/c/e/f

print(p1.parent.parent.joinpath('d1','d2/d3',Path('d3/d4','d5')))
/a/b/c/d1/d2/d3/d3/d4/d5

# 父路径列表
print(p1, list(p1.parents))
/a/b/c/e/f [PosixPath('/a/b/c/e'), PosixPath('/a/b/c'), PosixPath('/a/b'), PosixPath('/a'), PosixPath('/')]

# 根目录
print(p2.parents[len(p2.parents)-1])
print(p2.parents[len(p2.parents)-2])
/
/Users
# 当前文件路径
p2=Path(__file__)
print(p2)
/Users/sunday/Code/MG2022/d23/8-18-path.py

# 是否存在
print(p2.exists())
True

# 基名和父路径
print(p2.name,p2.parent)
8-18-path.py /Users/sunday/Code/MG2022/d23

# 后缀,后缀列表,前缀,基名
print(p2.suffix,p2.suffixes,p2.stem,p2.name)
.py ['.py'] 8-18-path 8-18-path.py

# 换名
#print(p2.parent, p2.parent.parent / 'redis')
print(p2.parent, p2.parent.with_name('redis')) 
/Users/sunday/Code/MG2022/d23 /Users/sunday/Code/MG2022/redis

# 修改扩展名
print(p2.with_suffix('.sh')) 
/Users/sunday/Code/MG2022/d23/8-18-path.sh
p2=Path(__file__)
print(Path(p2).cwd())
/Users/sunday/Code/MG2022/d23

# 修改后缀及父路径列表
print(list(p2.parent.with_suffix('.zip').absolute().parents))
[PosixPath('/Users/sunday/Code/MG2022'), PosixPath('/Users/sunday/Code'), PosixPath('/Users/sunday'), PosixPath('/Users'), PosixPath('/')]
p1=Path()
/Users/sunday/Code/MG2022/d23/8-18-path.sh

print(p1.home())
/Users/sunday

print(p1.is_absolute())
False
# 递归显示所有文件
print(list(p1.absolute().iterdir()))

# 创建目录
(p1/'d1/d2').mkdir(parents=True,exist_ok=True)

# 新建文件
(p1/'te.py').touch()

glob

# 显示所有文件 *通配符表任意次,不是正则
print(list(p5.glob('*')))

# 显示当前所有.py
print(list(p5.glob('*.py')))

# 显示当前目录下二级所有.py
print(list(p5.glob('*/*/*.py')

# 递归当前目录下所有*.py
print(list(p5.glob('**/*.py')

#当前目录下任意次目录所有 一个.py 如a.py
print(list(p5.glob('**/?.py')
for x in p5.parents[len(p5.parents)-2].iterdir():
    if x.is_dir():
        print('dir:',x)
        flag=False
        # for z in x.iterdir():
        #     flag=True
        #     break
        # print('Not Empty' if next(x.iterdir(),0) else 'empty')
        print('Not Empty' if next(x.iterdir(),0) else 'empty')
    elif x.is_file():
        print('file:',x)
    else:
        print('other',x)