Python: эффективный способ подстановки элемента списка в строку - PullRequest
1 голос
/ 03 мая 2011

Я создаю оболочку для сервера Minecraft, которая должна принимать новые команды из каталога, называемого командами, который содержит файлы, названные в честь команды, и все они содержат команды сервера, используемые для создания этой команды.Например, следующий фрагмент взят из файла, который определяет команду «Tell»:

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

Внутренне оболочка считывает стандартный вывод процесса сервера, ища признаки того, что пользователь выполняет команду.Затем он разбивает команду на части, взяв из нее имя «отправитель», которое, очевидно, является лицом, отправившим команду, «команда», представляющая собой строку из одного слова, обозначающего команду, и список с именем args, который содержит аргументы.следуя командной строке.Например, синтаксис команды tell таков:

tell jim hello

Что приводит к следующим именам:

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

Мой вопрос, исходя из приведенных выше примеров, как я могу сделатьпоследняя строка, скажем «output», читается следующим образом:

tell jim s0lder says: hello

Мне нужен в основном способ замены областей, заключенных в квадратные скобки в строке определения, соответствующими именами / элементами списка аргументов так, чтобы:

<sender> = sender
<1> = args[0]
<2> = args[1]

и т. Д. Для всех элементов в списке аргументов.Спасибо.

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Вот решение, которое не требует от вас изменения формата (все это делается программно).

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'
0 голосов
/ 03 мая 2011

Если вы можете немного изменить строки формата, встроенной функции format должно быть вполне достаточно:

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

output

tell jim s0lder says: hello
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...