ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python3.4新增的标准库pathlib模块

2020-02-22 20:00:12  阅读:331  来源: 互联网

标签:code home pathlib python3.4 模块 path Path os Out


python3.4版本新增了pathlib模块,它使用面向对象的编程方式来表示文件系统路径。
而在此之前和路径相关操作函数都放在os模块里面,尤其是os.path这个子模块。
不过,pathlib再python3.4版本和python3.6以上的版本有所差异,如果想全面使用pathlib模块,应该使用Python3.6或者更高版本。

基本使用

创建Path对象

In: p = Path(r'd:\test\tt.txt.bk')

获取文件名

In: p.name
Out: tt.txt.bk

获取文件名(去掉一个后缀)

In: p.stem                          
Out: tt.txt

获取文件一个后缀

In: p.suffix                        
Out: .bk

获取文件的所有后缀

In: p.suffixs                       
Out: ['.txt', '.bk']

获取一个父级目录

In: p.parent                        
Out: WindowsPath('d:/test')

获取所有父级目录

In: p.parents                       
Out: <WindowsPath.parents>
In: for i in p.parents:
        print(i)
Out: d:\test
     d:\

分割路径

In: a.parts                         
Out: ('d:\\', 'test', 'tt.txt.bk')

pathlib和os.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.expanduser Path.expanduser and Path.home
os.path.isdir Path.is_dir
os.path.isfile Path.is_file
os.path.islink Path.is_symlink
os.stat Path.stat, Path.owner, Path.group
os.path.isabs PurePath.is_absolute
os.path.join PurePath.joinpath
os.path.basename PurePath.name
os.path.dirname PurePath.parent
os.path.samefile Path.samefile
os.path.splitext PurePath.suffix

pathlib特色

用/拼接路径

过去路径拼接是用os.path.join:

In: os.path.join('/', 'home', 'dongwm/code')
Out: '/home/dongwm/code'
In: os.path.join('/home', 'dongwm/code')
Out: '/home/dongwm/code'

现在可以用pathlib.Path提供的joinpath来拼接:

In: Path('/').joinpath('home', 'dongwm/code')
Out: PosixPath('/home/dongwm/code')

但是更简单和方便的方法是用/运算符:

In: Path('/') / 'home' / 'dongwm/code'
Out: PosixPath('/home/dongwm/code')
In: Path('/') / Path('home') / 'dongwm/code'
Out: PosixPath('/home/dongwm/code')
In : '/' / Path('home') / 'dongwm/code'
Out: PosixPath('/home/dongwm/code')

链式调用

os.path把路径作为函数参数传进去,一个很长的例子:

In: os.path.isfile(os.path.join(os.path.expanduser('~/lyanna'), 'config.py'))
Out: True

pathlib写法

In: (Path('~/lyanna').expanduser() / 'config.py').is_file()
Out: True

touch方法

Python语言没有内置创建文件的方法(linux下的touch命令),过去这么做:

with open('new.txt', 'a') as f:
    ...

现在可以直接用Path的touch方法:

Path('new.txt').touch()

touch接受mode参数,能够在创建时确认文件权限,还能通过exist_ok参数方式确认是否可以重复touch(默认可以重复创建,会更新文件的mtime)

home

获得用户的HOME目录,过去的写法:

In : os.path.expanduser('~')
Out: '/Users/dongweiming'

现在就Path.home就可以了:

In : Path.home()
Out: PosixPath('/Users/dongweiming')

读写文件

Path对象自带了操作文件的方法:

In : p = Path('~/1.txt').expanduser()
In : p.write_text('123\n')
Out: 4
In : p.read_text()
Out: '123\n'
In : p.write_bytes(b'456\n')
Out: 4
In : p.read_bytes()
Out: b'456\n'
In : with p.open() as f:
...:     for line in f:
...:         print(line)
...:
456

修改文件名或文件路径 with_name/with_suffix

举个例子,有一个文件地址'/home/gentoo/screenshot/abc.jpg',2个需求:

  1. jpg格式转为png
In : p = Path('/home/gentoo/screenshot/abc.jpg')
In : p.with_suffix('.png')
Out: PosixPath('/home/gentoo/screenshot/abc.png')
  1. abc名称改为123
In : p.with_name(f'123{p.suffix}')
Out: PosixPath('/home/gentoo/screenshot/123.jpg')

mkdir

In : Path('1/2/3').mkdir(parents=True)

owner

有时候操作文件前需要确认拥有此文件的用户,过去都是这么写:

In : import pwd
In : pwd.getpwuid(os.stat('/usr/local/etc/my.cnf').st_uid).pw_name
Out: 'gengleiming'

现在封装起来可以直接用了:

In : p.owner()
Out: 'gengleiming'

标签:code,home,pathlib,python3.4,模块,path,Path,os,Out
来源: https://www.cnblogs.com/Raymon-Geng/p/12346866.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有