pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

使用 python 解析非常大的 xml 文件時出現問題

Troubles while parsing with python very large xml file(使用 python 解析非常大的 xml 文件時出現問題)
本文介紹了使用 python 解析非常大的 xml 文件時出現問題的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個大的 xml 文件(大約 84MB),格式如下:

I have a large xml file (about 84MB) which is in this form:

<books>
    <book>...</book>
    ....
    <book>...</book>
</books>

我的目標是提取每一本書并獲得其屬性.我嘗試如下解析它(就像我對其他 xml 文件所做的那樣):

My goal is to extract every single book and get its properties. I tried to parse it (as I did with other xml files) as follows:

from xml.dom.minidom import parse, parseString

fd = "myfile.xml"
parser = parse(fd)
## other python code here

但代碼似乎在解析指令中失敗.為什么會發生這種情況,我該如何解決?

but the code seems to fail in the parse instruction. Why is this happening and how can I solve this?

我應該指出,該文件可能包含希臘語、西班牙語和阿拉伯語字符.

I should point out that the file may contain greek, spanish and arabic characters.

這是我在 ipython 中得到的輸出:

This is the output i got in ipython:

In [2]: fd = "myfile.xml"

In [3]: parser = parse(fd)
Killed

我想指出的是計算機在執行過程中凍結,所以這可能與內存消耗有關,如下所述.

I would like to point out that the computer freezes during the execution, so this may be related to memory consumption as stated below.

推薦答案

我強烈建議在這里使用 SAX 解析器.我不建議在任何大于幾兆字節的 XML 文檔上使用 minidom.我已經看到它使用大約 400MB 的 RAM 讀取大小約為 10MB 的 XML 文檔.我懷疑您遇到的問題是由 minidom 請求過多內存引起的.

I would strongly recommend using a SAX parser here. I wouldn't recommend using minidom on any XML document larger than a few megabytes; I've seen it use about 400MB of RAM reading in an XML document that was about 10MB in size. I suspect the problems you are having are being caused by minidom requesting too much memory.

Python 帶有一個 XML SAX 解析器.要使用它,請執行以下操作.

Python comes with an XML SAX parser. To use it, do something like the following.

from xml.sax.handlers import ContentHandler
from xml.sax import parse

class MyContentHandler(ContentHandler):
    # override various ContentHandler methods as needed...


handler = MyContentHandler()
parse("mydata.xml", handler)

您的 ContentHandler 子類將覆蓋 ContentHandler(例如 startElementstartElementNSendElementendElementNScharacters.這些處理由 SAX 解析器在讀取您的 XML 文檔時生成的事件.

Your ContentHandler subclass will override various methods in ContentHandler (such as startElement, startElementNS, endElement, endElementNS or characters. These handle events generated by the SAX parser as it reads your XML document in.

SAX 是一種比 DOM 更低級"的 XML 處理方式;除了從文檔中提取相關數據外,您的 ContentHandler 還需要跟蹤它當前包含的元素.不過,從好的方面來說,由于 SAX 解析器不會將整個文檔保存在內存中,因此它們可以處理任何大小的 XML 文檔,包括那些比您更大的文檔.

SAX is a more 'low-level' way to handle XML than DOM; in addition to pulling out the relevant data from the document, your ContentHandler will need to do work keeping track of what elements it is currently inside. On the upside, however, as SAX parsers don't keep the whole document in memory, they can handle XML documents of potentially any size, including those larger than yours.

我還沒有嘗試過其他使用 DOM 解析器(例如 lxml)來處理這種大小的 XML 文檔,但我懷疑 lxml 仍然需要相當長的時間并使用大量內存來解析您的 XML 文檔.如果每次運行代碼時都必須等待它讀取 84MB XML 文檔,這可能會減慢您的開發速度.

I haven't tried other using DOM parsers such as lxml on XML documents of this size, but I suspect that lxml will still take a considerable time and use a considerable amount of memory to parse your XML document. That could slow down your development if every time you run your code you have to wait for it to read in an 84MB XML document.

最后,我不相信你提到的希臘語、西班牙語和阿拉伯語字符會造成問題.

Finally, I don't believe the Greek, Spanish and Arabic characters you mention will cause a problem.

這篇關于使用 python 解析非常大的 xml 文件時出現問題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Find all nodes by attribute in XML using Python 2(使用 Python 2 在 XML 中按屬性查找所有節點)
Python - How to parse xml response and store a elements value in a variable?(Python - 如何解析 xml 響應并將元素值存儲在變量中?)
How to get XML tag value in Python(如何在 Python 中獲取 XML 標記值)
How to correctly parse utf-8 xml with ElementTree?(如何使用 ElementTree 正確解析 utf-8 xml?)
Parse XML from URL into python object(將 XML 從 URL 解析為 python 對象)
Large XML File Parsing in Python(Python 中的大型 XML 文件解析)
主站蜘蛛池模板: 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 高压负荷开关-苏州雷尔沃电器有限公司 | 深圳市超时尚职业培训学校,培训:月嫂,育婴,养老,家政;化妆,美容,美发,美甲. | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 首页_欧瑞传动官方网站--主营变频器、伺服系统、新能源、软起动器、PLC、HMI | 北京京云律师事务所| 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 光环国际-新三板公司_股票代码:838504 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 铝合金线槽_铝型材加工_空调挡水板厂家-江阴炜福金属制品有限公司 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 导电银胶_LED封装导电银胶_半导体封装导电胶厂家-上海腾烁 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 |