【Python Snippets】Pathlib 模块

逻辑踏浪使
• 阅读 2079

概要

面向对象的文件系统路径操作模块

【Python Snippets】Pathlib 模块

pure paths: 单纯的路径操作,不提供 I/O 操作
concrete paths: 路径计算操作 + I/O 操作

常用的操作

1. 路径的属性

列出所有父目录、父目录、文件名或目录名、文件前缀、文件后缀等...

from pathlib import Path

p = Path('./test/filename.text')

p.parents                 # 所有父目录 
>> WindowsPath.parents

p.parent                  # 父目录
>> test

p.name                    # 文件名或目录名
>> filename.text

p.stem                    # 文件前缀
>> filename

p.suffix                  # 文件后缀
>> .text

p.is_dir()                # 文件夹判断
>> False        

p.is_file()               # 文件判断
>> True

p.exists()                # 路径是否存在
>> True

p.stat()                  # 获取路径属性
>> os.stat_result(st_mode=16895, st_ino=7036874417855445, st_dev=2287178555, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1576075587, st_mtime=1576075562, st_ctime=1576075197)

2. 路径的操作

创建文件夹、路径连接、写文件、读文件、遍历子路径等...

from pathlib import Path

# 创建文件夹
base_path = Path('dir/child_dir')
base_path.mkdir(exist_ok=True, parents=True)           

# 路径连接
file_path = base_path / Path('file.text')                

# 创建文件
file_path.touch(exist_ok=True)                          

# 写文件
with file_path.open(mode='w', encoding='utf-8') as f:     
    f.write('Hello World')

# 读文件
with file_path.open(mode='r') as f:                       
    print(f.read())

# 遍历子路径
for path in p.iterdir():                                  
    print(path)

# 递归遍历子路径 (正则)
for item in base_path.rglob('*.text'):                   
    print(item)

# 移动文件夹
new_path = base_path / Path('new_file.text')
file_path.replace(new_path)
 
# 删除文件 
new_path.unlink()

# 删除文件夹(必须为空)
new_path.parent.rmdir()

附录

os 和 os.path pathlib 说明
os.path.abspath() Path.resolve() 获取 path 的绝对路径
os.path.chmod() Path.chmod() 改变 path 的权限
os.path.mkdir() Path.mkdir() 创建文件夹
os.path.rename() Path.rename() path 重命名
os.path.replace() Path.replace() path 重命名 (新路径存在则替换)
os.path.remove(), os.unlink() Path.unlink() 删除 path
os.path.cwd() Path.cwd() 当前工作路径(current working directory)
os.path.exists() Path.exists() path 是否存在
os.path.expanduser() Path.expanduser() path 添加当前用户
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() path 的属性
os.path.samefile() Path.samefile() 是否为相同文件
os.path.isabs() PurePath.is_absolute() 是否为绝对路径
os.path.join() PurePath.joinpath() 路径连接操作
os.path.dirname() PurePath.parent 前缀路径
os.path.basename() PurePath.name 路径名称
os.path.splitext() PurePath.suffix 路径后缀

参考

https://docs.python.org/zh-cn/3/library/pathlib.html

https://xin053.github.io/2016/07/03/pathlib%E8%B7%AF%E5%BE%84%E5%BA%93%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
逻辑踏浪使
逻辑踏浪使
Lv1
男人要豪爽,喝酒要喝双。
文章
3
粉丝
0
获赞
0