python处理.xml文件工具包之XML2Dict

简介:

xml文件是可扩展标记语言,在保存数据时,经常和.xml文件打交道,它语法简明、格式友好。具体的信息可以到百度百科科普下,下面主要介绍下我用的处理.xml文件的工具包XML2Dict

工具包下载:http://files.cnblogs.com/kaituorensheng/%E5%A4%84%E7%90%86xml%E6%96%87%E4%BB%B6.zip

下载后把文件解压,和自己的.py文件放在一起,里边有两个文件:xml2dict.py, object_dict.py,在自己.py文件的开头加上

from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse("待处理文件名.xml")   

示例一:

待处理文件:

分析下这个文件的格式:

    最外一层被<kbpentlink></kbpentlink>包围

    往里一层是:<query></query>,query中包括<id><name>和<docid>两个属性

处理这个文件(取名:1.xml)代码:

复制代码
from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse('1.xml')
for q in r.kbpentlink.query:
    print q
    print q.id
    print q.name
    print q.docid
    print '-----------------'
复制代码

执行结果:

可以看到.xml文件被解析成字典的形式。使用给工具包的要点就是:分清层次,一点一点的往里面递进。

下边来解析一个比较难的示例:

示例二:

待处理文件:

分析

第一层:<entailment_corpus></entailment_corpus>

第二层:<TOPIC></TOPIC>

第三层:<H></H>,里面有属性<h_id><H_sentence><text>

第四层:(<text>属性有的前提下),里面属性<doc_id><s_id><evaluation><value>

这里的关键就是第三层:因为有的有一个<text>,有的则有多个,还有的没有:一个是得到的是个字典,多个时是个列表

解析代码如下:

 

复制代码
from xml2dict import XML2Dict
import types
xml = XML2Dict()
r = xml.parse('2.xml')
for topic in r.entailment_corpus.TOPIC:
    print 'topic.t_id:' + topic.t_id
    for h in topic.H:
        print 'H.h_id' + h.h_id
        print 'H.H_sentence' + h.H_sentence
        if h.has_key('text'):
            if type(h.text) == types.ListType:       //多个时为列表类型
                print 'hello list'
                print h.text
                for text in h.text:
                    print 'h.doc_id' + text.doc_id  //单个时

            else:
                print 'hello dic'
                print h.text            //单个时h.text就可以输出了,不要for了,否则错误
 
 
        else:
            print "no text attribute"
复制代码

 

结果:

这里引用了types里面的函数type(类型),用法如下示例:

已解决:

示例二中else替换为:type(h.text) == types.DictType: 效果不同,原因:

一般的字典类型为:

 

而此时类型为:

 

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/archive/2013/05/05/3061365.html,如需转载请自行联系原作者

相关文章
|
8天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
9 0
|
10天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
16天前
|
Python
【python】python跨文件使用全局变量
【python】python跨文件使用全局变量
|
25天前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
21 1
|
28天前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
29天前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
9 0
|
30天前
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
107 0
|
29天前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
10 0
|
3天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
6天前
|
Python
掌握Python导包技艺:揭秘导包语句的奥秘
掌握Python导包技艺:揭秘导包语句的奥秘
15 0