有没有一种简单的方法可以替换 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 许可协议
你是对的。要在 Path p 中用 new 替换旧的,你需要:
编辑
我们把 Path p 变成 str 所以我们得到这个 str 方法:
否则我们会得到这个 Path 方法: