读取XML结构
本文用xml.etree包
from xml.etree import ElementTree as ET
#parse返回一个python对象
tree = ET.parse('C:/Users/elenawang/Documents/data/datatext.xml')
#获得树(tree)的根元素
root = tree.getroot()
print(root)
#<Element 'GHO' at 0x000001E288E184A8>
查看root的所有方法和属性
print(dir(root))
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'iter', 'iterfind', 'itertext', 'keys', 'makeelement', 'remove', 'set']
查看根元素的子元素
print(list(root))
[<Element 'QueryParameter' at 0x000001E288E7FEA8>, <Element 'QueryParameter' at 0x000001E288EAA6D8>, <Element 'QueryParameter' at 0x000001E288EAA728>, <Element 'QueryParameter' at 0x000001E288EAA778>, <Element 'QueryParameter' at 0x000001E288EAA7C8>, <Element 'QueryParameter' at 0x000001E288EAA818>, <Element 'Copyright' at 0x000001E288EAA868>, <Element 'Disclaimer' at 0x000001E288EAA958>, <Element 'Metadata' at 0x000001E288EAA9F8>, <Element 'Data' at 0x000001E2890EC778>]
列表中包含element对象分别为QueryParameter,Copyright,Disclaimer,Metadata,Data
重点研究Data子元素
#重点研究Data子元素
data = root.find('Data')
print(list(data))
注:find 返回第一个匹配的元素,findall返回匹配所有元素。这里由于我们知道只有一个data,所以用find
返回一个超级长的列表,列表有Observation元素组成,我们遍历:
for observation in data:
for item in observation:
print(item)
输出很多dim和value,
- 我们来探索其中的内容,用.text
for observation in data:
for item in observation:
print(item)
返回很多None,是因为很多元素的标签之间没有任何文本
检查是否具有子元素:
for observation in data:
for item in observation:
print(list(item))
- 查看节点的属性 ,.attrib
for observation in data:
for item in observation:
print(list(item))
其中一条记录:
{
'Code': 'MLE', 'Category': 'SEX'}
{
'Code': '2012', 'Category': 'YEAR'}
{
'Code': 'WPR', 'Category': 'REGION'}
{
'Code': 'NIU', 'Category': 'COUNTRY'}
{
'Code': 'WB_LI', 'Category': 'WORLDBANKINCOMEGROUP'}
{
'Code': 'WHOSIS_000002', 'Category': 'GHO'}
{
'Code': 'PUBLISHED', 'Category': 'PUBLISHSTATE'}
{
'Numeric': '62.00000'}
我们希望和解析CSV文件一样,得到下边的结构:
{
'SEX'