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

Hec*_*tor 6 python python-3.x pathlib

有没有一种简单的方法可以替换pathlib.PathPython对象中的子字符串?该pathlib模块是更好的在很多方面比存储为一个路径str和使用os.pathglob.glob等等,这是建立在对pathlib。但是我经常使用遵循模式的文件,并且经常替换路径中的子字符串来访问其他文件:

data/demo_img.png
data/demo_img_processed.png
data/demo_spreadsheet.csv
Run Code Online (Sandbox Code Playgroud)

以前我可以做:

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")
Run Code Online (Sandbox Code Playgroud)

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"))
Run Code Online (Sandbox Code Playgroud)

转换为字符串以进行替换并转换为Path对象似乎很麻烦。假设我从没有字符串形式的副本img_file_path,而必须根据需要转换类型。

J_H*_*J_H 6

你是对的。要将Path p中的old替换为new,您需要:

p = Path(str(p).replace(old, new))
Run Code Online (Sandbox Code Playgroud)

  • 是的,需要强制转换为“str”。否则,它将调用“pathlib.Path”的“replace”方法,该方法不会执行相同的操作。 (3认同)