lxml,反向解析

时间:2012-10-30 13:34:54

标签: python lxml

我正在解析一个大文件(> 9GB)并在Python中使用iterparse的lxml解析文件,同时在我前进时清除。我在想,是否有办法在清理时向后解析?我可以看到我将如何独立于lxml实现它,但是使用这个包会很好。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

是,不......

有'简单'的解决方案,可以从“结束”反向开始。 但是有一个反向迭代器一直持续到结束并且正在“清除引用”并优化读取。

方法1:在文件结构和节点上拆分文件,以便解析你想要的内容。

方法2:检查“智能”方式在[1]

处解析它

我在案件中做了什么。 我之前知道,12gb文件的数据可能是最后的2gb。 所以我使用unix命令拆分文件并仅处理最后一个文件。

(这是一个丑陋的黑客,但在我的情况下很简单,工作得足够快,你也可以使用尾巴,但我也想存档其他文件)

- >一个真正的python master将使用file.seek(),但我认为unix命令更快

现在我使用第二种方法[1]

[1] - http://www.ibm.com/developerworks/xml/library/x-hiperfparse/

我希望这对你有所帮助我很难理解xml结构。

答案 1 :(得分:0)

iterparse()严格来说是前瞻性的,我很害怕。如果你想反向读取一个树,你必须向前读它,同时以某种形式将它写入某个中间存储(无论是在内存中还是在光盘上),这样你就更容易向后解析,然后读取它。我不知道有任何流解析器允许从前到后解析XML。

在我的脑海中,你可以使用两个文件,一个包含数据,另一个是数据文件中记录的偏移索引。一旦编写完毕,这将使阅读变得相对容易。

相关问题