首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -过滤超大的XML文件

Python -过滤超大的XML文件
EN

Stack Overflow用户
提问于 2020-02-11 04:07:58
回答 1查看 203关注 0票数 0

我有一个未压缩的Wikipedia转储文件,大约75 GB (压缩后:大约16 GB)。我尝试过使用类似以下内容的东西

代码语言:javascript
复制
from xml.etree.ElementTree import iterparse

for event, elem in iterparse('enwiki-latest-pages-articles-multistream.xml'):
    if elem.tag == "___":
        #do something
        elem.clear()

内核在Jupyter Notebook中运行一段时间后就会死掉。问题是,我不想要这个转储中的所有数据(假设大约1000M行) --我只想过滤几个实体。但要做到这一点,我必须先读一遍,对吧?这似乎就是导致内核死亡的原因。我只想要它的一个非常小的子集,并想看看是否有一种方法可以在Jupyter中完成这种过滤,比如大型XML文件。

EN

回答 1

Stack Overflow用户

发布于 2020-02-11 04:23:04

但是要这样做,我必须先把它读进去,对吧?

实际上,no.

一般来说,有两种方法来处理XML数据。一种方法是“全部读入内存”,一次创建一个内存中的数据结构。但是另一种方法通常称为SAX,它读取XML文件并在指定的位置调用代码中的“处理程序”。该文件可以任意大小。

还有另一种称为"XPath表达式“的技术。这使您可以构造一个字符串,该字符串告诉XPath引擎要查找哪些节点。然后,XPath将向您返回相应节点的列表。You ‘t to "write a program"(!)来获得你需要的结果,只要XPath能帮你完成这项工作。(我推荐使用libxml2,它是一个行业标准的二进制引擎,用于完成这类工作。参见How to use Xpath in Python?)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60157653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档