python,格式化字符串

时间:2011-02-08 00:58:06

标签: python

我正在尝试使用lazy参数构建一个格式字符串,例如我需要smth:

"%s \%s %s" % ('foo', 'bar') # "foo %s bar"

我该怎么做?

8 个答案:

答案 0 :(得分:30)

"%s %%s %s" % ('foo', 'bar')

你需要%%

答案 1 :(得分:17)

使用python 2.6:

>>> '{0} %s {1}'.format('foo', 'bar')
'foo %s bar'

或使用python 2.7:

>>> '{} %s {}'.format('foo', 'bar')
'foo %s bar'

答案 2 :(得分:4)

>>> "%s %%s %s" % ('foo', 'bar')
'foo %s bar'

答案 3 :(得分:2)

"%s %%s %s" % ('foo', 'bar') # easy!

Double%chars允许你将%s放在格式字符串中。

答案 4 :(得分:2)

%%转义%符号。所以基本上你只需要写:

"%s %%s %s" % ('foo', 'bar') # "foo %s bar"

如果您需要输出百分比或其他东西:

>>> "%s %s %%%s" % ('foo', 'bar', '10')
'foo bar %10'

答案 5 :(得分:1)

只需使用第二个百分比符号。

In [17]: '%s %%s %s' % ('foo', 'bar')
Out[17]: 'foo %s bar'

答案 6 :(得分:1)

Python 3.6现在支持使用PEP 498进行简写文字字符串插值。对于您的用例,新语法允许:

var1 = 'foo'
var2 = 'bar'
print(f"{var1} %s {var2}")

答案 7 :(得分:0)

如果你不知道参数的顺序,你可以使用字符串模板

这是一个自包含的类,它具有此功能的str(仅用于关键字参数)

class StringTemplate(str):
    def __init__(self, template):
        self.templatestr = template

    def format(self, *args, **kws):
        from string import Template
        #check replaced strings are in template, remove if undesired
        for k in kws:
            if not "{"+k+"}" in self:
                raise Exception("Substituted expression '{k}' is not on template string '{s}'".format(k=k, s=self))
        template= Template(self.replace("{", "${")) #string.Template needs variables delimited differently than str.format
        replaced_template= template.safe_substitute(*args, **kws)
        replaced_template_str= replaced_template.replace("${", "{")
        return StringTemplate( replaced_template_str )