Python XML 使用循环创建文件并为子元素赋值

Python XML file creation usnig a loop and assignig values to subelements

我将 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>

到目前为止,我一直在使用以下代码来创建此结构,但是当要添加很多 'sub-fields' 时,它会变得非常难看

_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)
.
.
.

所以我试着用一个看起来有点像这样的循环来简化它:

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')

如果我理解正确,请尝试这样的操作:

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>