字符串格式化参数的模板

时间:2018-02-14 05:52:04

标签: python string python-3.x formatting

我正在寻找字符串格式化模板的包或任何其他方法(手动替换除外)。

我希望实现这样的目标(这只是一个例子,所以你可以得到这个想法,而不是实际的工作代码):

text = "I {what:like,love} {item:pizza,space,science}".format(what=2,item=3)
print(text)

因此输出

I love science

我怎样才能做到这一点?我一直在寻找但找不到合适的东西。可能使用了错误的命名术语。

如果周围没有任何可以使用的软件包,我很乐意阅读一些关于自己编写代码的提示。

4 个答案:

答案 0 :(得分:1)

我可以使用whatitem的列表或元组,因为两种数据类型都会保留广告订单。

what = ['like', 'love']
item = ['pizza', 'space', 'science']

text = "I {what} {item}".format(what=what[1],item=item[2])
print(text)    # I like science

甚至这是可能的。

text = "I {what[1]} {item[2]}".format(what=what, item=item)
print(text)  # I like science

希望这有帮助!

答案 1 :(得分:1)

我认为使用列表就足够了python lists are persistent

what = ["like","love"]
items = ["pizza","space","science"]
text = "I {} {}".format(what[1],items[2])
print(text)

输出:     我喜欢科学

答案 2 :(得分:0)

为什么不使用字典?

options = {'what': ('like', 'love'), 'item': ('pizza', 'space', 'science')}
print("I " + options['what'][1] + ' ' + options['item'][2])

这回归:“我喜欢科学”

或者,如果您想要一种方法来摆脱重新格式化以容纳/删除空格,那么将其合并到您的字典结构中,如下所示:

options = {'what': (' like', ' love'), 'item': (' pizza', ' space', ' science'), 'fullstop': '.'}
print("I" + options['what'][0] + options['item'][0] + options['fullstop'])

这回归:“我喜欢披萨。”

答案 3 :(得分:0)

由于没有人提供直接回答我问题的适当答案,我决定自己解决这个问题。

我不得不使用双括号,因为单个括号是为字符串格式保留的。

我最终得到了以下课程:

class ArgTempl:
    def __init__(self, _str):
        self._str = _str

    def format(self, **args):
        for k in re.finditer(r"{{(\w+):([\w,]+?)}}", self._str,
                             flags=re.DOTALL | re.MULTILINE | re.IGNORECASE):
            key, replacements = k.groups()

            if not key in args:
                continue

            self._str = self._str.replace(k.group(0), replacements.split(',')[args[key]])

        return self._str

这是一个原始的,5分钟编写的代码,因此缺乏检查等等。它按预期工作,可以很容易地改进。

在Python 2.7&amp ;;上测试3.6〜

用法:

test = "I {{what:like,love}} {{item:pizza,space,science}}"
print(ArgTempl(test).format(what=1, item=2))
> I love science

感谢所有回复。