如何替换 Python pathlib.Path 中的子字符串?

新手上路,请多包涵

有没有一种简单的方法可以替换 pathlib.Path Python 对象中的子字符串? The pathlib module is nicer in many ways than storing a path as a str and using os.path , glob.glob etc, which are built in to 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 的字符串形式的副本,并且必须根据需要转换类型。

原文由 Hector 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

你是对的。要在 Path p 中用 new 替换旧的,你需要:

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


编辑

我们把 Path p 变成 str 所以我们得到这个 str 方法:

关于 method_descriptor 的帮助:

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

返回一个副本,其中所有出现的子字符串 old 都被 new 替换。

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

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

替换(自我,目标)

将此路径重命名为给定路径,破坏现有目的地(如果存在),并返回指向给定路径的新 Path 实例。

原文由 J_H 发布,翻译遵循 CC BY-SA 4.0 许可协议

我最近遇到了类似的问题,在寻找解决方案时发现了这个线程。与接受的答案相反,我没有将 pathlib.Path 对象转换为字符串。 Instead, I used its parent and name attributes ( name is a string itself), along with the joinpath() method.这是代码:

 In [2]: from pathlib import Path

In [3]: img_file_path = Path('data/demo_img.png')

In [4]: parent, name = img_file_path.parent, img_file_path.name

In [5]: proc_fn = name.replace('_img.png', '_img_proc.png')
   ...: data_fn = name.replace('_img.png', '_spreadsheet.csv')

In [6]: proc_img_file_path = Path(parent).joinpath(proc_fn)
   ...: data_img_file_path = Path(parent).joinpath(data_fn)

In [7]: proc_img_file_path
Out[7]: WindowsPath('data/demo_img_proc.png')

In [8]: data_img_file_path
Out[8]: WindowsPath('data/demo_spreadsheet.csv')

这种方法的一个优点是它避免了在父位中进行不需要的替换的风险。

原文由 Tonechas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题