比os好用的第三方库pathlib

421 阅读2分钟

/ 拼接路径

resolve() 规范化路径,生成一个名指示的绝对路径

usr_local = pathlib.Path('usr/local')
share = usr_local / '..' / 'share'
print(share.resolve())
#----------------result----------------------
'usr\share'

joinpath() 传入可序列化对象作为单独的参数来构建路径

root = pathlib.Path('/')
subdirs = ['user','local']
usr_local = root.joinpath(*subdirs)
print(usr_local)
#--------------------result---------------------------
'\user\local'

with_name() 替换文件名

filename = pathlib.Path('/user/test.txt')
filename = filename.with_name('thisPython.py')
print(filename)
#-----------------result------------------------
/user/thisPython.py

with_suffix() 替换文件后缀

filename = pathlib.Path('/user/test.txt')
filename = filename.with_suffix('.py')
print(filename)
#-----------------result------------------------
'\user\test.py'

parts 以/拆分路径,结果是一个元组

path = pathlib.Path('/user/name/ltj')
print(path.parts)
------------------result--------------------------
('\\', 'user', 'name', 'ltj')

parent 返回上一级父路径 | parents 属性是一个迭代器,返回上一级父路径,直到找到根路径

path = pathlib.Path('/user/name/ltj')
print(path.parent)
for parent in path.parents:
print(parent)
------------------result--------------------------
/usr/name

\user\name
\user
\

name 获取最后一个分隔符的文件名

suffix 获取文件名后缀

stem 获取文件名不包含后缀

home() 获取用户主目录

cwd() 获取当前工作目录

iterdir() 生成器,生成包含目录中每个元素生成一个新的Path实列

p = pathlib.Path('.')
for i in p.iterdir():
print(i)
-----------result-----------------------
.bash_history
.designer
.docker
.gitconfig
.minttyrc
.PyCharm2019.2
.pylint.d
.viminfo
.virtualenvs
.vscode
3D Objects
AppData
Application Data
Contacts
Cookies
Desktop
Documents
Downloads

glob() 找出一个与模式匹配的文件

p = pathlib.Path('.')
for i in p.glob('.*'):
print(i)
-------------result---------------------
.bash_history
.designer
.docker
.gitconfig
.minttyrc
.PyCharm2019.2
.pylint.d
.viminfo
.virtualenvs
.vscode

rglob() 递归扫描与模式匹配的文件

write_bytes() 以字节流的方式写入文件,会覆盖之前的内容

p = pathlib.Path(r'C:\Users\admin\Desktop\work_data_info\All_test\test_pathlib\pathlib_test.txt')
p.write_bytes('this is a test'.encode('utf-8'))

write_text() 以字符串的方式字符串写入文件,会覆盖之前的内容

p = pathlib.Path(r'C:\Users\admin\Desktop\work_data_info\All_test\test_pathlib\pathlib_test.txt')
p.write_text('this is a test')

read_bytes() 从文件中按照字节流读取

p = pathlib.Path(r'C:\Users\admin\Desktop\work_data_info\All_test\test_pathlib\pathlib_test.txt')
p.read_bytes()
-----------------result----------------------
b'asffdsfdfdsa'

read_text() 从文件中按照字符串读取

p = pathlib.Path(r'C:\Users\admin\Desktop\work_data_info\All_test\test_pathlib\pathlib_test.txt')
p.read_text()
-----------------result----------------------
asffdsfdfdsa

open() 打开文件并保留文件句柄

with p.open('r', encoding='utf-8') as handle:
print(f'read from open() {handle.read()}')

mkdir() 创建路径

p = pathlib.Path(r'C:/Users/admin/Desktop/text')
p.mkdir()

symlink_to() 创建一个符号链接,根据路径的值命名

p = pathlib.Path('example_link')
p.symlink_to('index.rst')
print(p)
print(p.resolve().name)
-----------------result-------------------------
example_link
index.rst

stat() 和 lstat() 来获取文件有关详细信息

p = pathlib.Path(r'C:\Users\admin\Desktop\work_data_info\test.html')
stat_info = p.stat()
print(f'文件名:{p.name}')
print(f'文件大小:{stat_info.st_size}')
print(f'文件权限: {stat_info.st_mode}')
print(f'文件所有者: {stat_info.st_uid}')
print(f'文件所在硬盘: {stat_info.st_dev}')
print(f'文件创建时间: {stat_info.st_ctime}')
print(f'文件最后修改时间: {stat_info.st_mtime}')
print(f'文件最后访问时间: {stat_info.st_atime}')
-------------------------------------------------
文件名:test.html
文件大小:706
文件权限: 33206
文件所有者: 0
文件所在硬盘: 3399566922
文件创建时间: 1568078206.9792645
文件最后修改时间: 1568617745.1509233
文件最后访问时间: 1568617746.1509233

mkdir() 创建目录

touch() 创建文件

p = pathlib.Path('test.txt')
p.touch()

rmdir() 删除目录,目录不存在则产生一个filenotfounderror异常

p = pathlib.Path('test.txt')
p.rmdir()

unlink() 删除文件