使用Python库ElementTree解析Hadoop的xml配置文件
2016-11-01 15:38
477 查看
一:Hadoop 的配置文件格式如下
如果用json来表达,格式如下
可见,配置文件整体是一个数组结构,每个数组元素是一个key-Value的字典表。
所以,只需要依次读出每个xml项,再遍历这个项下所有的子项,并获取子项的Tag和Value。
每个子项的Tag和Value可以存储在字典里,把所有子项再存储在数组里。
二、编码如下
可以使用xml.etree.ElementTree模块,该模块的详细介绍如下:
“https://docs.python.org/2/library/xml.etree.elementtree.html#module-xml.etree.ElementTree”
代码运行结束后将输出json格式的配置文件,xml中的注释自然丢失了。
这里没有考虑到tag有属性值的情况,因为Hadoop的配置文件中tag是没有属性的,如果xml中的tag有属性,那么就不能直接转换为json了。
如果要转换为json,需要单独为属性创建一个数据结构并将属性值存储进去。
<configuration> <property> <name>fs.default.name</name> <value>hdfs://gz-lingshu-cdn-cc01</value> </property> .... </configuration>
如果用json来表达,格式如下
[ { "name": "fs.default.name", "value": "hdfs://HDFS_DEFAULT_NAME_TAG", "description": "Deprecated. Use (fs.defaultFS) property instead" }, .... ]
可见,配置文件整体是一个数组结构,每个数组元素是一个key-Value的字典表。
所以,只需要依次读出每个xml项,再遍历这个项下所有的子项,并获取子项的Tag和Value。
每个子项的Tag和Value可以存储在字典里,把所有子项再存储在数组里。
二、编码如下
可以使用xml.etree.ElementTree模块,该模块的详细介绍如下:
“https://docs.python.org/2/library/xml.etree.elementtree.html#module-xml.etree.ElementTree”
#-*- coding:utf-8 -*- import json from xml.etree import ElementTree as ET xmlfile = "/etc/hadoop/core-site.xml" etobj = ET.parse(xmlfile) # parse 方法返回一个ElementTree Objects,该object的其他方法详细介绍如下: # https://docs.python.org/2/library/xml.etree.elementtree.html#elementtree-objects property_list = etobj.findall("/property") # findall 方法返回的也是一个elements列表,每一个列表的元素都是Element Objects,详细介绍Element Objects如下: # https://docs.python.org/2/library/xml.etree.elementtree.html#element-objects xmldata = [] for property in property_list:
property_dict = {}
for child in property.getchildren():
# 从官方看,这个方法在2.7之后不建议使用,建议使用list方法直接读取,官方原文:
# Deprecated since version 2.7: Use list(elem) or iteration.
# 那么上面这个for语句可以这样写
# for child in list(property):
property_dict[child.tag] = child.text
xmldata.append(property_dict)
print json.dumps(xmldata)
代码运行结束后将输出json格式的配置文件,xml中的注释自然丢失了。
这里没有考虑到tag有属性值的情况,因为Hadoop的配置文件中tag是没有属性的,如果xml中的tag有属性,那么就不能直接转换为json了。
如果要转换为json,需要单独为属性创建一个数据结构并将属性值存储进去。
相关文章推荐
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- 使用boost库解析xml配置文件
- 使用Digester解析XML配置文件
- tomcat之catalina使用Digester解析XML配置文件
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- hadoop core 默认配置文件(core-default.xml)参数解析(二)
- hadoop core 默认配置文件(core-default.xml)参数解析(一)
- [Java学习]使用digester 解析xml配置文件
- 单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接
- Solr的学习使用之(二)schema.xml等配置文件的解析
- 在config配置文件添加iis的Mime类型,检测文件中是否存在添加语句,使用xml解析方法
- 使用digester 解析xml配置文件
- Linux下使用libxml2解析XML配置文件
- java使用dom4j解析xml配置文件实现抽象工厂反射示例
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- hadoop core 默认配置文件(core-default.xml)参数解析(三)
- [Java学习]使用digester 解析xml配置文件
- 在vc中使用MSXML解析xml文件
- SQL文的管理和解析(一)利用Spring的Resource管理SQL的XML配置文件
- 转载:如何使用XCodeFactory自动生成XML配置文件和对应的解析类