【问题标题】:How to create a dynamic array in a for loop in Python如何在 Python 的 for 循环中创建动态数组
【发布时间】:2019-09-18 14:18:30
【问题描述】:

我正在编写一个 Python 脚本,我需要在其中创建以下类型的数组。如何动态制作这种类型的数组?

types = [
    Type('First'),
    Type('Second'),
    Type('Third', ['ThirdChild1', 'ThirdChild2']),
    Type('Fourth', ['FourthChild1', 'FourthChild2', 'FourthChild3'])
]

这是 test.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>
        <members>*</members>
        <name>First</name>
    </types>

    <types>
        <members>*</members>
        <name>Second</name>
    </types>

    <types>
        <members>ThirdChild1</members>
        <members>ThirdChild2</members>
        <name>Third</name>
    </types>

    <types>
        <members>FourthChild1</members>
        <members>FourthChild2</members>
        <members>FourthChild3</members>
        <name>Fourth</name>
    </types>

    <version>38.0</version>
</Package>

这就是从 xml 文件中获取名称和元素的方法

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

name = ET.Element("name")
members = ET.Element("members")

def retrieveType():
    for elem in root:
        for subelem in elem:
            if name.tag == str(subelem.tag).split('}')[1]:
                print('----------', subelem.text)

这个 subelem.text 有 membersname,我想将它们放入数组中。

【问题讨论】:

  • ET 是什么?可以包含导入吗?
  • 谢谢,我更新了问题。
  • 您的 XML 文档格式不正确,您能解决这个问题吗?
  • @Jab 谢谢,实际上结束标签没有正确缩进

标签: python arrays python-3.x xml-parsing


【解决方案1】:

根据您的方法使用内置类型的示例如下所示:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

name = ET.Element("name")
members = ET.Element("members")

def retrieveType():
    result = {}  # create an empty dictionary
    for elem in root:
        cur_members = []  # create an empty list
        cur_name = ""
        for subelem in elem:
            if name.tag == str(subelem.tag).split('}')[1]:
                cur_name = subelem.text
            if members.tag == str(subelem.tag).split('}')[1]:
                cur_members.append(subelem.text)  # add members to the list
        result[cur_name] = cur_members  # add the name/members to the dictionary
    return result


result = retrieveType()

您可以调整类似的方法来使用自定义Type 对象数组。 请参阅data structures 了解更多信息。

编辑:这是Anurag Shrivastava提供的最终解决方案:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

name = ET.Element("name")
members = ET.Element("members")

def retrieveType():
    finalResult = []
    for elem in root:
        cur_members = []
        cur_name = ""
        for subelem in elem:
            if name.tag == str(subelem.tag).split('}')[1]:
                cur_name = subelem.text
            if members.tag == str(subelem.tag).split('}')[1]:
                cur_members.append(subelem.text)
        finalResult.append('Type(' + str(cur_name) + ', ' + str(cur_members) + ')')
    return finalResult

【讨论】:

  • 感谢您的回答,它拯救了我的一天。我在你的答案中添加了一行,它给了我确切的解决方案。
  • 不客气,我编辑了答案以包含您的最终解决方案,感谢您提供!
猜你喜欢
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多