XML
XML是一门标记语言。也就是说,它具有包含格式化数据的文档结构。
XML文档本质上只是格式特殊的数据文件。
在XML文件中有两个位置可以保存数据值:2个标签之间,标签的属性。
导入XML数据
import xml.etree.ElementTree as ET
tree = ET.parse('data-text.xml') #把整个XML对象保存在变量tree中
root = tree.getroot() #getroot函数获得树的根元素
print(list(root)) #变量root的所有方法和属性
这样就获得了data-text.xml 文件的根元素root,并把root变为列表形式。
得到:
[<Element 'QueryParameter' at 0x000000000D864908>, <Element 'QueryParameter' at 0x000000000D864A48>, <Element 'QueryParameter' at 0x000000000D864A98>, <Element 'QueryParameter' at 0x000000000D864AE8>, <Element 'QueryParameter' at 0x000000000D864B38>, <Element 'QueryParameter' at 0x000000000D864B88>, <Element 'Copyright' at 0x000000000D864BD8>, <Element 'Disclaimer' at 0x000000000D864CC8>, <Element 'Metadata' at 0x000000000D864D68>, <Element 'Data' at 0x000000000FCC9D68>]
其中Element后面引号中为根元素root的子元素。某些元素具有子元素(不是所有)。可以用find或findall利用标签搜索子元素。
import xml.etree.ElementTree as ET
tree = ET.parse('data-text.xml') #把整个XML对象保存在变量tree中
root = tree.getroot() #getroot函数获得树的根元素
data = root.find('Data')
print(data)
得到子元素data
<Element 'Data' at 0x000000000DA29A48>
得到列表形式data
print(list(data))
[<Element 'Observation' at 0x000000000DA29A98>, <Element 'Observation' at 0x000000000DA29DB8>, <Element 'Observation' at 0x000000000DA24138>, <Element 'Observation' at 0x000000000DA24458>, <Element 'Observation' at 0x000000000DA24778>, <Element 'Observation' at 0x000000000DA24A98>, <Element 'Observation' at 0x000000000DA24DB8>, <Element 'Observation' at 0x000000000DA1ED68>, <Element 'Observation' at 0x000000000DA1EC78>, <Element 'Observation' at 0x000000000DA1E958>, <Element 'Observation' at 0x000000000DA1E408>, <Element 'Observation' at 0x000000000DA1E368>, <Element 'Observation' at 0x000000000DA1BEA8>, <Element 'Observation' at 0x000000000DA1BC28> ]
Observation为data的子元素
事实上可以这样:
import xml.etree.ElementTree as ET
tree = ET.parse('data-text.xml') #把整个XML对象保存在变量tree中
root = tree.getroot() #getroot函数获得树的根元素
data = root.find('Data')
for i in data: #data中每一个元素i
for ii in i: #每一个元素i中的每一个元素ii
print(ii.attrib) #字典形式ii
print(ii.text) #2个标签之间的文本,没有则None
Kazil J, Jarmul K. Data Wrangling with Python[J]. 2016.