Python:将列表项替换为字符串的有效方法

时间:2011-05-02 20:28:47

标签: python list substitution

我正在为Minecraft服务器创建一个包装器,它应该从名为commands的目录中获取新命令,该目录包含以命令命名的文件,所有这些命令都包含用于组成该命令的服务器命令。例如,以下代码段来自定义“tell”命令的文件:

tell <1> <sender> says: <2>

在内部,包装器读取服务器进程的stdout,查找用户正在运行命令的指示。然后它将命令拆分,从中取出名称“sender”,显然是发送命令的人,“command”是一个表示命令的单字符串,还有一个名为args的列表,其中包含参数跟随命令字符串。例如,tell命令的语法是:

tell jim hello

其结果如下:

sender = s0lder
command = tell
args = ['jim', 'hello']

我的问题是,假设上面的例子,如何制作最终字符串,说“输出”,请阅读:

tell jim s0lder says: hello

我基本上需要一种方法,用定义字符串中括号括起来的区域替换args列表的相应名称/项目,以便:

<sender> = sender
<1> = args[0]
<2> = args[1]
对于args列表中的所有项目,

等等。感谢。

2 个答案:

答案 0 :(得分:1)

这是一个不需要您更改格式的解决方案(全部以编程方式完成)。

sender = 's0lder'
args = ['jim', 'hello']

format = "tell <1> <sender> says: <2>".replace("<", "%(<").replace(">", ">)s")
# format == 'tell %(<1>)s %(<sender>)s says: %(<2>)s'
subs = {"<sender>": sender, "<1>": args[0], "<2>": args[1]}
print format % subs
# 'tell jim s0lder says: hello'

答案 1 :(得分:0)

如果您可以稍微更改格式字符串,内置的format函数应该足够了:

args = ["jim", "hello"]
kwargs = {"sender": "s0lder"}
print("tell {0} {sender} says: {1}".format(*args, **kwargs))

输出

tell jim s0lder says: hello