将格式字符串从%更改为备用字符?

时间:2011-06-25 23:41:00

标签: python

在python 2.6中,有没有办法为字符串格式化操作指定%以外的替换字符?或者是python解释器中的%char硬编码?

例如,要生成如下所示的字符串:

param1%02param2%03param3...

我目前必须这样做:

str = "%s%%02%s%%03%s" % (param1, param2, param3)

我希望能够做的是替换,比如说,^ for%并且能够做到:

str = "^s%02^s%03^s" ^ (param1, param2, param3)

哪种IMO更具可读性。

4 个答案:

答案 0 :(得分:3)

您可以使用新的str.format方法。它提供了更多的格式选项,更具可读性。

>>> '{0}%02{1}%03{2}'.format('a', 'b', 'c')
'a%02b%03c'

>>> '{param1} is also {param2}'.format(param1='foo', param2='bar')
'foo is also bar'

>>> '{0[name]} is {0[age]} years old'.format({'name': 'Bob', 'age': 42})
'Bob is 42 years old'

有关详细信息,请查看文档:{​​{3}}

答案 1 :(得分:2)

%是硬编码的。但是,您可以执行类似......

的操作
your_str = ("%s^02%s^03%s" % (param1, param2, param3)).replace("^", "%")

your_str = ''.join([param1, '%02', param2, '%03', param3])

答案 2 :(得分:2)

我完全同意JBernardo的回答,但是,为了完整起见,我只想指出,确实可以根据提问者的需要调整语言。这涉及从str派生一个类并覆盖其^运算符:

class yourstr(str):
    def __xor__(self, tuple):
        return self.replace("%", "%%").replace("^", "%") % tuple

然后你可以做类似的事情:

>>> param1 = "foo"
>>> param2 = "bar"
>>> param3 = "quux"
>>> yourstr("^s%02^s%03^s") ^ (param1, param2, param3)
'foo%02bar%03quux'

我不建议在一般情况下这样做,因为它会使代码更难以阅读和维护。

答案 3 :(得分:-3)

你不能 - 它甚至不是在python中硬编码,它在libc中的某个地方(在解释器下面的一个级别)硬编码。您可以编写一个包含^字符串的函数,并将其转换为%并获取现有%并将其转换为%%,然后将其传递给格式设置。