Получение значений из тега xml в текстовый файл с разделителями-запятыми в unix

У нас есть xml-файл, который состоит из xml-тегов различных процессов, запущенных на машинах. Я хочу получить имена всех процессов вместе с их командой start, stop и сохранить ее как разделенные запятыми для каждого процесса.

Example of one of tag in file is below:-

<ИМЯ ПРОЦЕССА = "Анонимный" TEMP = "Нет">

<Описание> Бла Бла Бла </ Описание>

<LogFile> $ {PROCESS_LOG} </ LogFile>

<Пользователь = "ABC">

<Старт>

<Команда> СТАРТПРОЦЕСС </ Команда>

<Параметры> 12 </ Параметры>

</ Пуск>

<Стоп>

<Команда> СТОП ПРОЦЕСС </ Команда>

</ Стоп>

<SearchCriteria>

<ExeName = "SREACH12">

<Параметры> ПРОЦЕСС12 </ Параметры>

</ ExeName>

</ SearchCriteria>

</ Пользователь>

</ ПРОЦЕСС>

*

I Want output as below in text file :-

  • Анонимный, STARTPROCESS 12, STOPPROCESS, SREACH12 PROCESS12

Обратите внимание, что в файле есть несколько таких тегов, поэтому я хочу, чтобы все они были такими же, как указано выше. Что-то в оболочке тоже будет работать. Пожалуйста помоги.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
37
1

Ответы 1

Используйте re.

import re
text ='< PROCESS NAME = "Anonymous" TEMP = "No" > \
< Description>Bla Bla Bla< /Description > \
< LogFile>${PROCESS_LOG}< /LogFile >\
< User = "ABC" >\
< Start >\
< Command>STARTPROCESS< /Command >\
< Parameters>12< /Parameters >\
< /Start >\
< Stop >\
< Command>STOPPROCESS< /Command >\
< /Stop >\
< SearchCriteria >\
< ExeName = "SREACH12" >\
< Parameters>PROCESS12< /Parameters >\
< /ExeName >\
< /SearchCriteria >\
< /User >'

# Target: Anonymous,STARTPROCESS 12,STOPPROCESS,SREACH12 PROCESS12

pName =  re.findall(r'PROCESS NAME = "(.+?)" TEMP', text)
commands =  re.findall(r'< Command>(.+?)< /Command >', text)
params =  re.findall(r'< Parameters>(.+?)< /Parameters >', text)
exeName =  re.findall(r'< ExeName = "(.+?)" >', text)

myOutput = pName[0]+","+commands[0]+" "+params[0]+","+commands[1]+","+exeName[0]+" "+params[1]
print(myOutput)

Печать:

Anonymous,STARTPROCESS 12,STOPPROCESS,SREACH12 PROCESS12

Спасибо за помощь. Но в приведенном выше примере я указал только один тег, и у меня есть несколько тегов, как указано выше, в файле xml. Итак, мне нужно получить эти данные из файла xml для всех.

manav sharma 02.05.2018 09:21

Аналогичным образом вы можете получить данные из других тегов. Просто измените параметры соответствия в начале и конце соответственно для каждого re.match (). Возможно, вам придется выполнить рекурсивную проверку команды и параметров каждого pName.

Mika72 02.05.2018 13:53

Другие вопросы по теме