如何在Python中使用多个{}清晰地格式化字符串,而这些字符串也需要忽略?

时间:2019-04-09 17:07:08

标签: python format splunk

在Python中设置Splunk访问的搜索查询。但是,在跑步过程中,我遇到了IndexError: tuple index out of range。我在代码中发现多个{},并尝试使用.format最早且最晚应用变量会导致上述错误。

我尝试过切换到.format_map,但是除非我做错了什么,否则它会导致更多错误。 (可能是)

我无法更改代码中的字符串。因此,我试图找到将时间变量附加到字符串中以供使用的方法。

以下是变量调用:

import _datetime_param
_earliest = _datetime_param.earliest()
_latest = _datetime_param.latest()

格式化工作:

def eop():
    search_query = (
        'index="eop" sourcetype="eop:trace" Status="Quarantined" earliest={} latest={} | '
        'convert timeformat="%Y-%m-%d %I:%M:%S" ctime(_time) as Date | '
        'table Date src_ip src_user subject recipient | sort Date'
    ).format(_earliest, _latest)
    search_query.strip()
    if not (search_query.startswith('search') or search_query.startswith('|')):
        search_query = 'search ' + search_query
    return search_query

格式化遇到错误:

def okta():
    search_query = (
        'index="okta" user!="CityADSync" action="failure" earliest={} latest={} | '
        'convert timeformat="%Y-%m-%d %I:%M:%S" ctime(_time) AS Date | dedup actors{}.ipAddress | '
        'rename actors{}.ipAddress AS IPAddress | rename actors{}.id AS Device | rename targets{}.id AS TargetID | '
        'rename targets{}.displayName AS TargetName| rename targets{}.login AS TargetLogin | '
        'table Date Device IPAddress TargetID TargetName TargetLogin | sort Date'
    ).format(_earliest, _latest)
    search_query.strip()
    if not (search_query.startswith('search') or search_query.startswith('|')):
        search_query = 'search ' + search_query
    return search_query

def okata():中,我无法更改search_query的设置以使其在Splunk中以这种方式运行。因此,我正在寻找一种在不出错的情况下干净地处理这两种方式的方法。坦白说,Python中有没有办法忽略您不想使用的{}?如果是.format_map,是否有一种干净的方法可以使我失踪?

谢谢!

1 个答案:

答案 0 :(得分:0)

我可以使用f String

您的字符串保留为:

string = f' a text {var} other text {other_var}'