Мой скрипт Python читает XML-файл , чтобы получить структуру папок.
Мой XML-файл:
<?xml version="1.0" encoding="utf-8"?>
<serverfiles name="Test">
<serverfiles name="Fail">
<serverfiles name="Cam1">
<serverfiles name="Mod1">
<serverfiles name="2019-01-07" />
<serverfiles name="2019-01-08" />
</serverfiles>
<serverfiles name="Mod2">
<serverfiles name="2019-02-07" />
<serverfiles name="2019-02-08" />
</serverfiles>
</serverfiles>
</serverfiles>
<serverfiles name="Pass">
<serverfiles name="Cam1">
<serverfiles name="Mod1">
<serverfiles name="2019-03-07" />
<serverfiles name="2019-03-08" />
</serverfiles>
<serverfiles name="Mod2">
<serverfiles name="2019-04-07" />
<serverfiles name="2019-04-08" />
</serverfiles>
</serverfiles>
</serverfiles>
</serverfiles>
Python-скрипт:
from pprint import pprint
import xml.etree.ElementTree as ET
def walk(e):
name = e.attrib['name']
children = [walk(c) for c in e if e.tag == 'serverfiles']
return {'name': name, 'children': children} if children else {'name': name, 'path': ''}
file = ET.parse(r'folder_structure.xml')
r = file.getroot()
s = walk(r)
pprint(s)
Это дает следующий вывод:
{'children': [{'children': [{'children': [{'children': [{'name': '2019-01-07',
'path': ''},
{'name': '2019-01-08',
'path': ''}],
'name': 'Mod1'},
{'children': [{'name': '2019-02-07',
'path': ''},
{'name': '2019-02-08',
'path': ''}],
'name': 'Mod2'}],
'name': 'Cam1'}],
'name': 'Fail'},
{'children': [{'children': [{'children': [{'name': '2019-03-07',
'path': ''},
{'name': '2019-03-08',
'path': ''}],
'name': 'Mod1'},
{'children': [{'name': '2019-04-07',
'path': ''},
{'name': '2019-04-08',
'path': ''}],
'name': 'Mod2'}],
'name': 'Cam1'}],
'name': 'Pass'}], 'name': 'Test'}
Но мой желаемый вывод :
{'children': [{'children': [{'children': [{'children': [{'name': '2019-01-07',
'path': '/Test/Fail/Cam1/Mod1/'},
{'name': '2019-01-08',
'path': '/Test/Fail/Cam1/Mod1/'}],
'name': 'Mod1'},
{'children': [{'name': '2019-02-07',
'path': '/Test/Fail/Cam1/Mod2/'},
{'name': '2019-02-08',
'path': '/Test/Fail/Cam1/Mod2/'}],
'name': 'Mod2'}],
'name': 'Cam1'}],
'name': 'Fail'},
{'children': [{'children': [{'children': [{'name': '2019-03-07',
'path': '/Test/Pass/Cam1/Mod1/'},
{'name': '2019-03-08',
'path': '/Test/Pass/Cam1/Mod1/'}],
'name': 'Mod1'},
{'children': [{'name': '2019-04-07',
'path': '/Test/Pass/Cam1/Mod2/'},
{'name': '2019-04-08',
'path': '/Test/Pass/Cam1/Mod2/'}],
'name': 'Mod2'}],
'name': 'Cam1'}],
'name': 'Pass'}], 'name': 'Test'}
Я ссылался получить доступ к родительскому узлу ElementTree и как получить xpath из root в python при анализе xml , но не смог найти решение.
Как получить путь (начиная с Root Node ) для каждого конечного узла при анализе файла XML ?