繁体   English   中英

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

[英]Python: Efficient Way to Substitute an Item of a List into a String

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

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

在内部,包装器读取服务器进程的标准输出,寻找用户正在运行命令的迹象。 然后它将命令拆分,取名为“sender”,显然是发送命令的人,“command”是一个指示命令的单字字符串,以及一个名为 args 的列表,其中包含 arguments在命令字符串之后。 例如,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 列表中的所有项目,依此类推。 谢谢。

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

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'

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

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

输出

tell jim s0lder says: hello

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM