Python XML создание файла при использовании oop и присвоение значений подэлементам - PullRequest
1 голос
/ 04 февраля 2020

Я использую модуль xml .etree.ElementTree с Python 3.6 для создания файла XML с десятками подэлементов. То, к чему я стремлюсь, должно выглядеть так:

<shots>
    <shot id="0">
    <Audio_Channels>2</Audio_Channels>
    <Audio_File>testhq12.mov</Audio_File>
    <Audio_Fps>Unspecified</Audio_Fps>
    ...
    <Type>C</Type>
    <Width>4096</Width>
    <shot/>
    <shot id="1">
    ....
</shots>

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

_audio_channels = Element('Audio_Channels')
shot.append(_audio_channels)
_audio_channels.text = str(audio_channels_data)

_audio_file = Element('Audio_File')
shot.append(_audio_file)
_audio_file.text = str(audio_file_data)
.
.
.

И поэтому я попытался упростить это с помощью al oop, который выглядит примерно так:

fields = ['Audio_Channels', 'Audio_File', 'Audio_Fps', ...]
for k in fields:
    prop = Element(k)
    shot.append(prop)

Но я понятия не имею, как передать какой-либо текст их позже, используя только элементы из списка полей в качестве ключей? Пробовал это, но это не работает

shot.insert(str(audio_file_data), 'Audio_File')

1 Ответ

0 голосов
/ 04 февраля 2020

Если я правильно понимаю, что вам нужно, попробуйте что-то вроде этого:

import xml.etree.ElementTree as ET
fields = ['Audio_Channels', 'Audio_File', 'Audio_Fps']
dats = [ 2,'testhq12.mov', 'Unspecified']

shots = ET.Element('shots')
shot = ET.SubElement(shots, 'shot')
for f, d in zip(fields,dats):
    elem = ET.Element(f)
    elem.text=str(d)
    shot.append(elem)

Вывод должен выглядеть примерно так:

<shots>
   <shot>
      <Audio_Channels>2</Audio_Channels>
      <Audio_File>testhq12.mov</Audio_File>
      <Audio_Fps>Unspecified</Audio_Fps>
   </shot>
</shots>
...