python系列13:python中Path常用功能

1. 基本功能

建议使用pathlib模块来处理文件和文件夹,可以跨平台。pathlib提供path对象来操作,包括目录和文件。

from pathlib import Path
p =Path()     #输出格式。PosixPath('.')
p =Path('a','b','c/d')  #输出格式PosixPath('a/b/c/d')
p =Path('/etc')    #PosixPath('/etc')

2. 路径拼接和分解

使用操作符/进行路径拼接,有两种方式:① Path对象/Path对象;② Path对象/字符串,或者字符串/Path对象;也可以使用joinpath方法。

使用Parts属性进行路径分解,可以返回路径中的每一个部分

p = Path() # 当前目录,PosixPath('.')
p = p/'a'     #PosixPath('a')
p1 = 'b'/p       #PosixPath('b/a')
p2 = Path('c')      #PosixPath('c')
p3 = p2 /p1         #PosixPath('c/b/a')
print(p3.parts)      #('c', 'b', 'a')
p3.joinpath('etc','int.d',Path('.httpd'))     #PosixPath('c/b/a/etc/int.d/.httpd')

3. 获取路径

Str获取路径字符串。Bytes获取路径字符串的bytes。

p = Path('/etc')    
print(str(p),bytes(p))
#/etc b'/etc'

使用parent获取父目录,使用parents获取所有父目录,使用absolute方法获取绝对路径

p = Path('/a/b/c/d')
p.parent.parent # / PosixPath('/a/b')
p.absolute().parents[len(p.absolute().parents)-1] # PosixPath('/')
print(len(p.absolute().parents)) # 4

获取文件路径的方法:
(1)name:目录的最后一个部分
(2)suffix:目录中最后一个部分的拓展名
(3)stem:目录最后一个部分,没有后缀。
(4)suffixes 返回多个扩展名列表。
(5)with_suffix(suffix):补充扩展名到路径尾部,返回新的路径,扩展名存在则无效。
(6)with_name(name):替换目录最后一个部分并返回一个新的路径。

p = Path('/etc/config/system/cf.config.gz')
print(p.name)     #cf.config.gz
print(p.suffix)      #.gz
print(p.suffixes)    #['.config', '.gz']
print(p.stem)    #cf.config
print(p.with_name('cf.config')) 
#/etc/config/system/cf.config
print(p.with_suffix('.txt'))
#/etc/config/system/cf.config.txt

4. 文件操作

open(mode=’r’,buffering=-1,encoding=None,errors=None,newline=None):使用方法类似内建函数open,返回一个文件对象。
read_bytes():以’rb’读取路径相对文件,并返回二进制流。
read_text(encoding=None,errors=None):以’rt’ 方式读取路径对应文件,返回文本。
Path.write_bytes(data):以’wb’方式写入数据到路径对应文件。
write_text(data,encoding=None,errors=None):以’wt’方式写入字符串到路径对应文件。

p = Path('my_binary_file')
p.write_bytes(b'Binary file contents')
p.read_bytes()
#打印出b'Binary file contents'
p = Path('my_text_file')
p.write_text('Text file contents')
p.read_text()
#打印出'Text file contents'
p = Path('test.py')
p.write_text('hello python')
print(p.read_text())
# hello python
with p.open()as f:
	print(f.read(5))
# hello

5. 文件夹操作

(1)as_uri()将文件路径返回URI。
(2)mkdir(mode=0o777,parents=False,exist_ok=False)
(3)Parents,是否创建父目录,True等同于mkdir-p:False时,父目录不存在,则抛出fileNotfounderror。
(4)exist_ok参数,在3.5版本加入,flase时路径存在,抛出异常,True时候异常被忽略。
(5)Iterdir():迭代当前目录
(6)touch(mode=0o666,exist_ok=True)创建一个文件
(7)cwd():返回当前工作目录
(8)home():返回当前目录
(9)is_dir():是否是目录,目录存在返回True.
(10)is_symlink():是否是软连接
(11)is_file():是否是普通文件,文件存在返回True
(12)is_socket():是否是socket文件
(13)is_block_device():是否是块设备。
(14)is_char_device():是否是字符设备
(15)is_absolute():是否是绝对路径
(16)resolve():返回一个新的路径,这个新的路径就是当前Path的绝对路径,如果是软连接则直接被解析
(17)absolute()也可以获取绝对路径,但是推荐使用resolve()
(18)exists()目录或文件是否存在
(19)rmdir()删除空目录,没有提供判断目录为空的方法。
(20)ls():获取所有文件和文件夹

p = Path()
p.exists() # True
p /='a/b/c/d'
p.exists() # False
p.mkdir() # 报错,创建不成功
p.mkdir(parents=True) # 创建成功
p.exists() # True
p.mkdir(parents=True) # 报错,已经有了,不能再创建
p.mkdir(parents=True,exist_ok=True) # 不报错
p /='readme.txt' # p = PosixPath('a/b/c/d/readme.txt')
p.parent.rmdir() # 只剩下PosixPath('a/b/c')
p.parent.exists() # False
p.mkdir() # 报错,不存在文件
p.mkdir(parents=True) # 成功
for x in p.parents[len(p.parents)-1].iterdir():
    print(x,end='\t')
    if x.is_dir():
        flag = False
        for _ in x.iterdir():
            flag = True
            break
           print('dir','Not Empty' if flag else 'Empyt',sep='\t')
    elif x.is_file():
        print('file')
    elseprint('other file')

6. 通配操作

glob(pattern):通配给定的模式。
rglob(pattern):通配给定的模式,递归目录,返回一个生成器。

list(p.glob('test*')) #返回当前目录对象下的test开头的文件
list(p.glob('**/*.py'))#递归所有目录,等同于rglob,会比较费时
g = p.rglob('*.py')  #生成器
next(g)

match(pattern):返回True或False的通配函数。

Path('a/b.py').match('*.py')  #True
Path('/a/b/c.py').match('b/*.py')#True
Path('/a/b/c.py').match('a/*.py') #False    因为a文件下找不到.Py文件
Path('/a/b/c.py').match('a/*/*.py')#True
Path('/a/b/c.py').math('a/**/*.py')#True
Path('/a/b/c.py').math('**/*.py')#True
  • 19
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canvas和Path是Android用于绘制图形的两个重要类。Canvas是一个画布,可以在上面进行绘制操作,而Path是用来描述图形轮廓的类。 在给定的代码示例,Canvas被用于绘制路径。通过调用canvas.drawPath(path, paint),可以将指定的路径绘制在画布上。在这里,传入的path参数是一个Path对象,用于描述需要绘制的图形的轮廓。而paint参数是一个Paint对象,用于设置绘制路径时的样式、颜色等属性。 在绘制路径时,还可以通过设置Paint.Style来指定绘制的样式。FILL样式表示只绘制路径的内容,STROKE样式表示只绘制路径的边界,FILL_AND_STROKE样式表示既绘制路径的内容又绘制路径的边界。 Path还可以用于剪切画布或者在路径上绘制文本。通过调用canvas.clipPath(path)可以将画布裁剪成指定的路径形状,只有在路径内部的区域才会被显示。而调用canvas.drawTextOnPath(text, path, hOffset, vOffset, paint)可以在指定的路径上绘制文本。 另外,Path还具有一些其他的功能,比如可以添加多阶贝塞尔曲线,可以通过调用path.rLineTo(dx, dy)来绘制一条相对偏移的直线段,可以通过调用path.lineTo(x, y)来绘制一条直线段,可以通过调用path.addRect(left, top, right, bottom, dir)来绘制一个矩形等。 因为路径可以是复杂的,所以可以通过调用path.addPath(anotherPath)将另一个路径添加到当前路径。这样可以实现路径的合并或者在一个路径上绘制多个图形。 总结起来,Canvas和Path是Android用于绘制图形的重要类。Canvas是一个画布,可以在其上进行绘制操作,而Path是用来描述图形轮廓的类。可以通过调用canvas.drawPath(path, paint)将指定的路径绘制在画布上,并可以通过设置Paint.Style来指定绘制的样式。Path还可以用于剪切画布或者在路径上绘制文本。另外,Path还具有一些其他的功能,比如添加多阶贝塞尔曲线,合并路径等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值