#python #xml #arrays #list #input
#python #xml #массивы #Список #ввод
Вопрос:
Я хочу отсортировать некоторые функции по Python и XML, но я действительно в замешательстве.
Я приведу вам пример,
Существует 3 варианта ввода, которые содержатся в config.xml досье.
<inputs>
<input1 value='1- Sending Email' />
<input2 value='2- Extracting a Tar File' />
<input3 value='3- Rebooting Server' />
</inputs>
—
Итак, я уже обработал каждую функцию в папке с именем «funcs», и у меня нет проблем с ними.
Все, что я хочу, это;
1- Перечислите входные данные и спросите, какой из них выбрать.
2- И мне нужно сделать это по массиву. Потому что я хочу только обновить XML-файл в будущем, поэтому я никогда не буду касаться основного файла, который позволяет python выполнять все функции.
Любая помощь сделает меня благодарным, спасибо.
Комментарии:
1. Вы пытаетесь задать полный вопрос, но детали все еще не ясны. Какая проблема с кодированием у вас сейчас и что вы до сих пор пытались выполнить 1 и 2, приведенные выше
2. Я запрашиваю код, который перечисляет новые входные данные в основном файле python (когда я его запускаю), если я добавляю входные данные в XML. Я еще не использовал никаких кодов, потому что я не знаю, что использовать. Вот о чем я прошу.
3. Возможно, вам следует создать модуль для размещения всех ваших функций внутри, а затем импортировать их для использования в вашей основной программе. Итак, в этом модуле вы также можете включить входные сообщения (уже связанные с их соответствующими функциями) и вообще избавиться от xml ИЛИ, по крайней мере, определить эту связь только в одном файле.
Ответ №1:
Это требует некоторого размышления, но я думаю, что знаю, что вы ищете… Я создал файл с именем inputs.xml
, который содержит xml, на который вы ссылались выше, затем я прочитал его и сохранил входные данные в словаре python под названием inputs
from xml.etree import ElementTree
inputs = dict()
tree = ElementTree.parse( 'inputs.xml' )
for row in tree.getiterator('inputs'):
for elem in row.getchildren():
inputs[elem.tag] = elem.get('value')
Результаты…
$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from xml.etree import ElementTree
>>>
>>> inputs = dict()
>>> tree = ElementTree.parse( 'inputs.xml' )
>>> for row in tree.getiterator('inputs'):
... for elem in row.getchildren():
... inputs[elem.tag] = elem.get('value')
...
>>> print inputs
{'input2': '2- Extracting a Tar File', 'input3': '3- Rebooting Server', 'input1': '1- Sending Email'}
>>>
Теперь предположим, что вы принимаете входные данные от пользователя и сохраняете их в виде строки в переменной python с именем input
… если вы хотите получить доступ к тому, какой выбор выбрал пользователь, используйте inputs["input" input]
…
Комментарии:
1. Это очень полезно, спасибо. Мне нужно немного больше информации. Когда я хочу отправить почту, введите 1 и нажмите enter. Что будет дальше? Как Python узнает, что я печатаю?
Ответ №2:
Это кажется скорее архитектурной проблемой, чем проблемой Python.
Если у вас есть куча функций, к которым вы никогда не захотите прикасаться, у вас должна быть каждая функция, связанная с сообщением imput где-нибудь (скорее всего, в том же исходном коде функции, а не в xml).
Вы могли бы, например, поместить все функции в один файл и импортировать его как модуль.
Затем, когда вы запускаете свою программу, вы создаете список функций, которые хотите представить пользователю, каким-то образом сортируете их численно и отображаете входное сообщение для каждой функции.
Пример модуля:
def reset():
print "reset all"
def sendmail():
print "send mail"
funcs = {
"reset": {"function": reset, "message": "Choose to reset"},
"sendmail": {"function": sendmail, "message": "Choose to email someone"}
}
При этом ваш xml должен содержать только ключи funcs
словаря. Затем, чтобы распечатать сообщение, вы должны использовать funcs['reset']['message']
, например, и использовать функцию, вы должны использовать funcs['reset']['function'](args)
.
Это работает, я уже использовал что-то очень похожее.
Комментарии:
1. Я зашифрую исходные данные, поэтому я не смогу редактировать их в будущем. Вот почему я пытаюсь объединить его с XML.
2. Отлично. Поэтому, по крайней мере, рассмотрите возможность наличия тесной связи между каждой функцией и ее входным сообщением, например, с использованием словаря.