快速解析超大XML不占用太大内存

 1 import xml.etree.ElementTree as ET
 2
 3 def parse_res(xml_file):
 4     res_dic = {}
 5     tmp_lst_lev1 = []
 6     tmp_lst_lev2 = []
 7     add_flag = False
 8     for event, elem in ET.iterparse(xml_file):
 9         if event == ‘end‘:
10             if elem.tag == ‘Item‘:
11                 tmp_lst_lev1.append(dict(elem.attrib))
12             elif elem.tag == ‘Enum‘:
13                 enum_str = ‘‘.join([ ‘‘.join([‘[‘, item[‘value‘], ‘=‘, item[‘name‘], ‘]‘]) for item in tmp_lst_lev1])
14                 res_enum = {}
15                 res_enum[‘id‘] = elem.attrib[‘id‘]
16                 res_enum[‘name‘] = enum_str
17                 tmp_lst_lev2.append(res_enum)
18                 tmp_lst_lev1 = []
19             elif elem.tag == ‘EnumRes‘:
20                 res_dic[‘EnumRes‘] = {}
21                 tmp_dic = res_dic[‘EnumRes‘]
22                 for item in tmp_lst_lev2:
23                     tmp_dic[ item[‘id‘].split(‘.‘)[1] ] = item[‘name‘]
24                 tmp_lst_lev2 = []
25             elif elem.tag == ‘MeasUnitRes‘ or elem.tag == ‘CounterNameRes‘ or elem.tag == ‘CounterUnitRes‘:
26                 res_dic[elem.tag] = {}
27                 tmp_dic = res_dic[elem.tag]
28                 for item in tmp_lst_lev1:
29                     tmp_dic[ item[‘id‘].split(‘.‘)[1] ] = item[‘name‘]
30                 tmp_lst_lev1 = []
31             #CommonInfo.Resource.xml
32             elif elem.tag == ‘DevTypeNameRes‘ or elem.tag == ‘VendorRes‘ or elem.tag == ‘MocRes‘:
33                 res_dic[elem.tag] = {}
34                 tmp_dic = res_dic[elem.tag]
35                 for item in tmp_lst_lev1:
36                     tmp_dic[‘id‘] = item[‘id‘].split(‘.‘)[1]
37                     tmp_dic[‘name‘] = item[‘name‘]
38                 tmp_lst_lev1 = []
39             #StaticList.xml
40             elif elem.tag == ‘param‘:
41                 if ‘alarmId‘ == elem.attrib[‘name‘]:
42                     id = elem.text
43             elif elem.tag == ‘alarm‘:
44                 tmp_lst_lev1.append([id, elem.attrib[‘name‘]])
45             elif elem.tag == ‘alarms‘:
46                 res_dic[elem.tag] = {}
47                 tmp_dic = res_dic[elem.tag]
48                 for item in tmp_lst_lev1:
49                     tmp_dic[ item[0] ] = item[1]
50                 tmp_lst_lev1 = []
51         elem.clear()   #关键在这一名,处理完节点及时清理内存
52     return res_dic
时间: 2024-08-24 16:57:50

快速解析超大XML不占用太大内存的相关文章

mysql5.6默认情况下内存占用太大

下载了mysql5.6.12 ,默认占用内存达400多M,  而原来使用的5.0 只有30M.. 解决方案:调整以下参数----------------performance_schema_max_table_instances=600table_definition_cache=400table_open_cache=256 这样下来,mysql5.6.12就只使用  40---60M左右的内存了. 以下是5.6默认的设置performance_schema_max_table_instanc

Unity3D占用内存太大的解决方法【先转,慢慢看】

Unity3D占用内存太大的解决方法 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的. 其实场景里所有静态的对象也有这么一

beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本

' XLS_to_CSV.vbs ' ' Converts an Excel workbook to a comma-separated text file. Requires Microsoft Excel. ' Usage: ' WScript XLS_to_CSV.vbs <input file> <output file> Option Explicit ' MsoAutomationSecurity Const msoAutomationSecurityForceDisa

一个Java对象到底占多大内存?(转)

最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

一个Java对象到底占多大内存

最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3

Unity3D占用内存太大的解决方法

原文链接:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBund

跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件

原文:跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件 源代码下载地址:http://www.zuidaima.com/share/1591110000167936.htm 这个是我本人写的CXF的WebService的一个正在项目中使用的程序, 支持跨平台,经测试,java和C#客户端能正常使用,其中利用Xstream生成和解析xml,不需要修改对象;支持内部私有字段,直接根据生成java类生成xml,反过来根据xml生成java类. 运行说明: 部署到

PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)

一.XPATH简单入门 XPATH ,XQUERY 专门查询XML语言,查询速度快 使用方法: (1)创建DOM工具,并且加载 xml文件 $xml = new  DOMDocument('1.0','utf-8'); $xml -> load('./dict.xml'); 注:若是对html文件进行快速解析, 同样的道理 此处使用   loadhtmlfile (‘dict.html’); (2)创建xpath解析工具 $xpath = new DOMXPATH($xml); (3)编写xpa

[Swift通天遁地]七、数据与安全-(2)使用Fuzi(斧子)类库实现对XML和HTML文档的快速解析

本文将演示使用Fuzi(斧子)类库实现对XML和HTML文档的快速解析. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Fuzi' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoAp