Перечисление входных данных на Python с использованием XML и массива

#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. Отлично. Поэтому, по крайней мере, рассмотрите возможность наличия тесной связи между каждой функцией и ее входным сообщением, например, с использованием словаря.