使用Python库ElementTree解析Hadoop的xml配置文件

一:Hadoop 的配置文件格式如下
<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模块,该模块的详细介绍如下:
#-*- 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,需要单独为属性创建一个数据结构并将属性值存储进去。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值