python3.4新增的标准库pathlib模块
作者:互联网
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个需求:
- jpg格式转为png
In : p = Path('/home/gentoo/screenshot/abc.jpg')
In : p.with_suffix('.png')
Out: PosixPath('/home/gentoo/screenshot/abc.png')
- 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