在Python中,有没有一种简单的方法来替换pathlib.Path对象中的子字符串?pathlib module is nicer in many ways比将一条路径存储为str,并使用os.pathglob.glob等,它们内置于pathlib中.但我经常使用遵循某种模式的文件,并经常替换路径中的子字符串来访问其他文件:

data/demo_img.png
data/demo_img_processed.png
data/demo_spreadsheet.csv

以前我可以做:

img_file_path = "data/demo_img.png"
proc_img_file_path = img_file_path.replace("_img.png", "_img_proc.png")
data_file_path = img_file_path.replace("_img.png", "_spreadsheet.csv")

pathlib可以用with_suffix()方法替换文件扩展名,但只接受扩展名作为有效后缀.解决办法是:

import pathlib
import os


img_file_path = pathlib.Path("data/demo_img.png")
proc_img_file_path = pathlib.Path(str(img_file_path).replace("_img.png", "_img_proc.png"))
# os.fspath() is available in Python 3.6+ and is apparently safer than str()
data_file_path = pathlib.Path(os.fspath(img_file_path).replace("_img.png", "_img_proc.png"))

转换成字符串进行替换,再转换成Path个对象似乎很费劲.假设我从来没有img_file_path字符串格式的副本,并且必须根据需要转换类型.

推荐答案

你说得对.要在路径p中将旧的替换为新的,您需要:

p = Path(str(p).replace(old, new))

编辑

我们将路径p转换为str,得到了这个str方法:

有关方法描述符的帮助:

替换(自身、旧的、新的,计数=-1,/)

返回一个副本,其中所有出现的子字符串旧替换为新.

否则我们会得到这个路径方法:

关于模块pathlib中函数替换的帮助:

替换(self 、目标)

将此路径重命名为给定路径,如果现有目标存在,则删除它,并返回指向给定路径的新路径实例.

Python-3.x相关问答推荐

小部件padx和包方法ipadx有什么不同?

文件名中的文件打开和撇号

不同的焦点顺序和堆叠顺序 tkinter

python3,将整数转换为字节:对于小整数使用 to_bytes() 有哪些替代方法?

拆分列表的元素并将拆分后的元素包含到列表中

嵌套协议的使用(协议成员也是协议)

pytorch 中 mps 设备的 manual_seed

Pandas:从 Pandas 数据框中的 1 和 0 模式中获取值和 ID 的计数

如何在Pandas 中按条件计算分组?

有没有办法使用重采样矢量化添加缺失的月份?

有效地缩短列表,直到第一次和最后一次出现不同于 None 的值

正则表达式从文本文件中捕获包含制表符/空格和子字符串的部分字符串

在python中基于列表理解的条件下跳过元素

UnicodeDecodeError:utf-8编解码器无法解码位置 1 的字节 0x8b:无效的起始字节,同时读取Pandas中的 csv 文件

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

如何在 Python 中计算 cohen 的 d?

Python的max函数有多高效

如何在 QGraphicsView 中启用平移和zoom

如何阻止散景在 Jupyter Notebook 中打开新标签?

Beautifulsoup 的单元测试失败