无法使用模板modu替换python字符串

2024-09-27 07:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python模板模块替换以下内容。你知道吗

start_date BETWEEN DATEADD(days,-14,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM-DD}'

我正在使用ConfigParser读取值并将其存储到字典(config\u params)中,这是我能够成功完成的。然后我做了一个安全的替代品,以替代到上述模板,但它似乎没有做任何事情。它替换了文件中的许多其他参数,但似乎没有替换${DATE\YYYY-MM-DD}

我使用的代码如下:

with open(templateFile, 'r+') as f:
    temp = Template(f.read())
    resultFile = temp.safe_substitute(config_params)

有人知道为什么会这样吗?是它不喜欢的()吗?你知道吗

模板文件:

SELECT
x
,y
,z
,a
,b
INTO ${od}.${tab}
FROM
mphd.${pd} as h
WHERE
a BETWEEN DATEADD(month,-12,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM-    DD}'
;

配置文件:

[GeneralParams]
od = sandbox
tab = abcd
pd = hierarchy_expanded
DATE_YYYY-MM-DD = 2016-08-05

配置参数:

{'od': 'sandbox', 'DATE_YYYY-MM-DD': '2016-08-05', 'pd': 'hierarchy_expanded', 'tab': 'abcd'}

结果文件:

SELECT
x
,y
,z
,a
,b
INTO sandbox.abcd
FROM
mphd.hierarchy_expanded as h
WHERE
a BETWEEN DATEADD(month,-12,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM- DD}'
;

Tags: and文件模板dateasbetweentabdd
1条回答
网友
1楼 · 发布于 2024-09-27 07:28:04

根据the doc,标识符应该遵循的默认模式是:[_a-z][_a-z0-9]*。使用substitute而不是safe_substitute会对此发出警告。你知道吗

但是,您可以通过创建新的模板类来解决此问题:

class MyTemplate(Template):
    idpattern = '[_a-z][_a-z0-9-]*' # Note the extra -

然后在代码中使用MyTemplate(或者任何你想命名的名称),而不是Template)。你知道吗

相关问题 更多 >

    热门问题