我需要从作为参数传递给脚本的UNC路径、API调用和计算日期的组合中构建一个Windows(仅限)文件路径。
我有一个可怕的时间,主要是由于Windows使用反斜杠字符来分隔文件路径。我读到过"路径库"模块应该能够把这些乱七八糟的东西整理出来,但是在构建文件路径时,它显然不支持串联。
UNC路径作为字典从另一个应用程序(PRTG Network Monitor:
)传递给脚本。{"fileshare": "//server02/logs/"}
我读进去,然后需要附加一个从API调用派生的主机名:
logPath = Path(params["fileshare"] + "/" + apiHostname + "/")
然后计算需要附加到日志路径的日期,以及分隔符"-"文件名后缀:
filePath = Path(logPath, + apiHostname + "-", + past_day + ".log" )
问题出现在连接过程中:
{"text": "Python Script execution error: unsupported operand type(s) for +: 'WindowsPath' and 'str'", "error": 1}}
有人能解释一下我如何建立一个路径,以便计算文件名,它应该看起来像这样:
\server02logslog01.rhmgmt.lanlog01.rhmgmt.lan-2021-07-28.log
可以打开处理吗?
是pathlib"模块应该能够整理出这些混乱
输入:
from datetime import date, timedelta
from pathlib import Path
params = {"fileshare": "//server02/logs/"}
apiHostname = 'log01.rhmgmt.lan'
past_day = str((date.today() - timedelta(days=1)))
创建初始路径并附加所有部分:
fileshare = Path(params['fileshare'])
filepath = fileshare / apiHostname / f"{apiHostname}-{past_day}.log"
输出:
>>> filepath
PosixPath('//server02/logs/log01.rhmgmt.lan/log01.rhmgmt.lan-2021-07-28.log')
是的,pathlib
可以很容易地整理事情。正如我在评论中建议的那样,您可以使用joinpath()
方法来连接正在构建Path
的组件。它的作用相当于os.path.join()
的作用。
唯一稍微棘手的部分是,您必须首先创建一个空的Path
,以便使用它们从PurePath
继承的方法。
from datetime import date, timedelta
from pathlib import Path
params = {"fileshare": "//server02/logs/"}
apiHostname = 'log01.rhmgmt.lan'
past_day = str((date.today() - timedelta(days=1)))
filePath = Path().joinpath(params["fileshare"], apiHostname,
apiHostname + '-' + past_day + '.log')
print(filePath) # -> \server02logslog01.rhmgmt.lanlog01.rhmgmt.lan-2021-07-29.log