如何使用python从xml中提取特定数据?

时间:2018-01-18 03:33:08

标签: python xml

我对python来说比较新。我一直试图通过实践方法学习python(我通过做euler项目学习了c / c ++)。 现在我正在学习如何从文件中提取数据。我已经掌握了从简单的文本文件中提取数据的问题,但我有点卡在xml文件上。 我试图做的一个例子。 我在谷歌驱动器上备份了我的通话记录,而且它们很多(约4000) 这是xml文件示例

<call number="+91234567890" duration="49" date="1483514046018" type="3" presentation="1" readable_date="04-Jan-2017 12:44:06 PM" contact_name="Dad" />

我想把所有的电话都给我爸爸,然后像这样显示

number = 234567890
duration = "49"  date="04-Jan-2017 12:44:06 PM"
duration = "x"   date="y"
duration = "n"   date="z"

等等。 你怎么建议我这样做?

1 个答案:

答案 0 :(得分:0)

建议在问题中提供足够的信息,以便重新创建问题。

iter

首先,我们需要弄清楚我们<call ../>可以使用哪些元素。由于call是此处的根元素,因此我们对此有所了解。

注意:如果在提供的行之前有标记/元素,则需要找出正确的根元素而不是>>> [i for i in root.iter('call')] [<Element 'call' at 0x29d3410>]

iter

您可以在此处看到,我们可以call在元素iter上。

然后我们简单地import xml.etree.ElementTree as ET data_file = 'test.xml' tree = ET.parse(data_file) root = tree.getroot() for i in root.iter('call'): print 'duration', "=", i.attrib['duration'] print 'data', "=", i.attrib['date'] 覆盖元素,并根据需要分离元素属性键和值。

工作代码

>>> 
duration = 49
data = 1483514046018
>>> 

<强>结果

struct Animal {
    var age: Int
    var type: String

    var jsonString: String {
        return "{\"\(age)\": \"\(type)\"}"
    }

    var jsonObjc: Any? {
        if let data = jsonString.data(using: String.Encoding.utf8) {
            return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)
        }
        return nil
    }

}


let animal = Animal(age: 1, type: "dog")
print(animal.jsonString)
print(animal.jsonObjc ?? "nil")