还在使用os.path?Python中的Pathlib太香了
写在前面
相信现在依然有很多人习惯于使用os来处理文件/文件夹/路径等,但其实Python自带的Pathlib库处理这些更优雅、更安全,你会发现很多大型开源项目都在使用它,那么它到底有什么魅力?花点时间让我们一起看看吧
(相关资料图)
先看这个引例,假设我们需要获取某个文件夹下所有的txt文件,基于os会写成如下形式
使用Pathlib则变成如下形式,是不是心动了
的最大缺点是将系统路径视为字符串,极容易导致混乱,Pathlib 在中被支持, 通过将路径表示为独特的对象解决了这个问题,并为路径处理引入更多可扩展用法,许多操作在os需要层层嵌套,而Pathlib将使开发人员更轻松地处理与路径和文件相关的所有事情
处理路径
1. 创建路径
几乎所有pathlib 的功能都可以通过其 Path 子类访问,可以使用该类创建文件和目录
有多种初始化Path的方式,比如,使用当前工作路径
使用home
同样的可以指定字符串路径创建路径
使用正斜杠运算符进行路径连接
检查路径是否存在,可以使用布尔函数 exists
检查文件是否存在
使用 is_dir 或 is_file 函数来检查是否为文件夹、文件
大多数路径都与当前运行目录相关,但某些情况下必须提供文件或目录的绝对路径,可以使用 absolute
如果仍然需要将路径转为字符串,可以调用 str(path) 强制转换
现如今大多数库都支持 Path 对象,包括 sklearn 、 pandas 、 matplotlib 、 seaborn 等
2. Path属性
Path 对象有许多有用属性,一起来看看这些示例,首先定义一个图片路径
先从 parent 开始,它将返回当前工作目录的上一级
获取文件名
它将返回带有后缀的文件名,若只想要前缀,则使用stem
只想要后缀也很简单
如果要将路径分成多个部分,可以使用 parts
如果希望这些组件本身就是 Path 对象,可以使用 parents 属性,它会创建一个生成器
for i in image_:
print(i)
#
处理文件
想要创建文件并写入内容,不必再使用 open 函数,只需创建一个 Path 对象搭配 write_text 或 write_btyes 即可
读取文件,则可以 read_text 或 read_bytes
但请注意, write_text 或 write_bytes 会覆盖文件的现有内容
要将新信息附加到现有文件,应该在 a (附加)模式下使用 Path 对象的 open 方法:
使用rename 重命名文件,比如在当前目录中重命名,如下 变成了 new_
renamed_md = _stem("new_markdown")
(renamed_md) # PosixPath('data/new_')
通过 stat().st_size 查看文件大小
# Display file size
renamed_().st_size # 49
查看最后一次修改文件的时间
from datetime import datetime
modified_timestamp = renamed_().st_mtime
(modified_timestamp) # (2023, 8, 1, 13, 32, 45, 542693)
st_mtime 返回一个自 1970 年 1 月 1 日以来的秒数。为了使其可读,搭配使用 datatime 的 fromtimestamp 函数。
要删除不需要的文件,可以 unlink
renamed_(missing_ok=True)
如果文件不存在,将 missing_ok 设置为 True 则不会引起报错
处理目录
首先,看看如何递归创建目录
new_(parents=True, exist_ok=True)
默认情况下, mkdir 创建给定路径的最后一个子目录,如果中间父级不存在,则必须将 parents 设置为 True 达到递归创建目的
要删除目录,可以使用 rmdir ,如果给定的路径对象是嵌套的,则仅删除最后一个子目录
new_()
要在终端上列出 ls 等目录的内容,可以使用 iterdir 。结果将是一个生成器对象,一次生成一个子内容作为单独的路径对象,和不同的是,它返回每个内容的绝对路径而不是名字
for p in ().iterdir():
print(p)
# /home/user/anaconda3
# /home/user/.googleearth
# /home/user/.zcompdump
# /home/user/.ipython
# /home/user/.bashrc
要捕获具有特定扩展名或名称的所有文件,可以将 glob 函数与正则表达式结合使用。
例如,使用 glob("*.txt") 查找主目录中所有文本文件
home = ()
text_files = list(("*.txt"))
len(text_files) # 3
要递归搜索文本文件(即在所有子目录中),可以glob 与 rglob 结合使用:
all_text_files = [p for p in ("*.txt")]
len(all_text_files) # 5116
以上就是Pathlib中常用方法,是不是感觉肥肠方便,如果有帮助到你就给个点赞三连吧,我是啥都生,下期再见
关键词:
上一篇:这次又被抢崩了...
下一篇:最后一页
- 国家移民管理局暂停签发韩国、日本公民来华口岸签证及72/144小时过境免签-环球滚动
- 港股异动 | 药明生物(02269)升7% 近三月北水增仓超5个百分点 机构料全年业绩持续高增
- 当前快报:美国小企业乐观度降至近十年来倒数第二
- 英文爱情的句子唯美句子大全(精选259句)
- 粤港澳大湾区中小企业报告:逾6成中小企业预期2023年将投放可观资金于大湾区_天天热文
- 山西泽州警方摧毁省级目标贩毒网络 17名毒贩累计贩毒超30公斤 今日热门
- 安逸花网贷8万逾期还不起我会不会被起诉 全球快播
- 有意思小周刊(2023.01.09):一文详解|影响成长的关键思考_世界消息
- 当前要闻:电子车牌板块1月9日跌0.11%,易华录领跌,主力资金净流出6738.9万元
- 省呗网贷逾期14年多久会上征信
-
光弘科技第二季度业绩环比改善 汽车电子等新领域增速可观
证券时报网讯,8月24日晚间,光弘科技(300735)(300735)8月24日晚披露20
-
Pleasure是什么意思中文(英语中‘pleasure’是什么意思)
精选小编来为大家解答以上的问题。Pleasure是什么意思中文,英语中‘pl
-
云南红塔银行上半年业绩“腰斩” 资本充足率有待提高
本文来源:时代周报作者:韩迅,实习生邓涵越朱玥银行利润“腰斩”,还
-
诈领8.3亿美元巨额新冠补贴,美司法部3个月起诉逾300人
司法部公布,联邦及州府在过去3个月侦破多宗诈骗新冠疫情援助的案件,
-
CompAsia获得A轮融资,Gobi Partners领投
CompAsia是一个二手电子设备交易平台,主要通过旗下一站式平台为用户提
-
2023青海西宁油价一直上涨原因是什么?
国际油价上涨原油市场方面,市场普遍预计沙特将把目前的自愿减产协议的
-
营收与毛利率改善,浙江世宝业绩是否迎来转向
《投资者网》潘思敏近期,转向器龙头浙江世宝(002703 SZ)发布2023年
-
德康农牧波动剧烈的业绩:负债超90亿,财务风险引关注
德康农牧波动剧烈的业绩:负债超90亿,财务风险引关注《港湾商业观察》
-
西藏旅游上半年营收翻番 收购实控人资产引监管问询
8月21日晚间,西藏旅游(SH600749,股价12 10元,市值27 46亿元)公布2
-
京津冀蓝皮书提出——创新财政支持方式,支持协同创新共同体建设
8月20日,首都经济贸易大学与社会科学文献出版社共同发布了《京津冀蓝
X 关闭
还在使用os.path?Python中的Pathlib太香了
这次又被抢崩了...
2023年8月25日石油磺酸钠价格最新行情预测
8月25日AI芯片板块跌幅达2%
奇思妙想 绽放斑斓——探馆第37届全国青少年科技创新大赛
X 关闭
得知西安疫情防控“升级” 男子夜骑共享单车回咸阳淳化
中国医生将任SIU主席背后:从追随者同行者到引领者
海南省通报政法队伍教育整顿成果
云南两地发现核酸阳性人员 西安实行最严格的社会面管控
广东梅州大埔中央红色交通线沿线发现多株百岁古树