路径操作-Path

os.path

python3.4之前,使用os.path操作文件及目录

Path

与os.path相比,Path更简洁,使用起来更方便

pathlib可以跨平台操作文件及目录,通过Path函数来进行操作

from pathlib import Path

路径拼接和分解

  • 操作符/
    • Path对象/Path对象
    • Path对象/字符串
    • 字符串/Path对象
  • 分解
    • parts属性,可以返回路径的每一个部分
  • joinpath(*other)
    • 连接多个字符串对象到Path对象中

示例:

from pathlib import Path

p = Path()
print(p)
p1 = Path('abc/dbs/api')
print(p1)
print(Path(p / 'testpython' / 'fib.py' / p1 ))
print(p1.parts)
print(p.joinpath('a','b','c'))

获取路径

  • str 获取路径字符串
  • bytes 获取路径字符串的bytes

示例:

print(type(str(p1)))
print(bytes(p1))
print(type(bytes(p1)))

父目录

parent 目录的逻辑父目录

parents 父目录序列,索引0是直接的父

# 父目录序列
 print(p1.parent.parent.parent)
 print(p1.parents)
 for x in p1.parents:
     print(x)

name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)

name:目录的最后一部分

suffix:目录中最后一个部分的扩展名

stem:目录最后一个部分,没有后缀

suffixes:返回多个扩展名列表

with_suffix(suffix):补充扩展名到路径尾部,返回新的路径,扩展名存在则无效

with_name(name): 替换目录最后一个部分并返回一个新的路径

示例:

p2 = Path('/test/a.txt')
print(p2.name)
print(p2.suffix)
print(p3.suffixes)
print(p2.stem)
print(p2.with_name('bac'))
print(p3.with_suffix('.def'))

cwd()  返回当前工作目录

home() 返回当前家目录

p2.cwd()
#PosixPath('/root')
p2.home()
#PosixPath('/root')

is_dir() 是否是目录,目录存在返回True

is_file() 是否是普通文件,文件存在返回True

is_symlink() 是否是软链接

is_socket() 是否是socket文件

is_block_device() 是否是块设备

is_char_device() 是否是字符设备

is_absolute() 是否是绝对路径

resolve() 返回一个新的路径,即当前Path对象的绝对路径,如果是软链接,则直接被解析

absolute() 也可以获取绝对路径,但推荐使用resolve()

示例:

print(p4.is_dir())
print(p2.is_file())
print(p2.is_symlink())
print(p2.is_socket())
print(p2.is_block_device())
print(p2.is_char_device())
print(p2.is_absolute())
print(p2.resolve())
print(p2.absolute())

exists() 目录或文件是否存在

rmdir() 删除空目录,不为空时报错,为空时删掉对应的目录

touch(mode=0o666,exist_ok=True) 创建一个文件

as_uri() 将路径返回成URI        

mkdir(mode=0o777,parents=False,exit_ok=False)

parents是否创建父目录,True等同于mkdir -p;False时,父目录不存在,则抛出FileNotFoundError

exit_ok参数,在3.5版本加入,False时,路径存在,抛出FileExistsError;True时,FileExistsError被忽略

p2 = Path(p1 / 'test_path.txt')
p2.touch()
p1.as_uri()
p2.mkdir()

iterdir() 迭代当前目录,目录必须存在

示例:

通配符

glob(pattern) 通配给定的模式

rglob(pattern)通配给定的模式,递归目录

返回一个生成器

示例:

list(p1.glob('*'))
list(p1.rglob('test*'))

匹配

match(pattern) 模式匹配成功返回True

用的不多,一般转化为字符串再用正则表达式匹配

示例:

stat()相当于stat命令,如果是软链接,显示链接对应的原文件

lstat()同stat(),显示软链接本身的文件

示例:

 

文件操作:对原有open方法的封装

open(mode='r', buffering=-1, encoding=None,errors=None, newline=None)

类似内建函数open,返回一个文件对象

p5 = Path('D:/test_liujj/test.py')
with p5.open(encoding='utf-8') as f:
    print(f.read())

3.5增加了新的函数

read_bytes()
以'rb'读取路径对应文件,并返回二进制流。

print(p5.read_bytes())

read_text(encoding=None, errors=None)
以r方式读取路径对应文件,返回文本。

print(p5.read_text(encoding='utf-8'))

Path.write_bytes(data)
以'wb'方式写入数据到路径对应文件。
write_text(data, encoding=None, errors=None)

以'wt'方式写入字符串到路径对应文件。

p6 = Path('D:/test_liujj/test_write')
print(p6.write_text('sdjskdjsk'))
print(p6.read_text())

print(p6.write_bytes(b'sdjskdjeeeeeeeesk'))
print(p6.read_bytes())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值