使用 python cElementTree 快速检查大型 XML 中标签的存在

fast checking the existence of tag in large XML using python cElementTree

我有XML个几百兆到几十G的文件,用Python'scElementTree来处理。由于内存有限,速度慢,我不想将所有内容都加载到内存中,使用 et.parse 然后 findfindall 方法来查找标签是否存在(我没有尝试这样,实际上)。现在我简单地使用 et.iterparse 遍历所有标签来达到这个目的。如果标签位于文件末尾附近,这也可能非常慢。我想知道是否有更好的方法来实现这一点并获取标签的位置?如果我知道标签所在的顶层(例如,索引),其大小比文件的其他部分小得多,是否可以遍历顶层标签然后定位该部分进行解析?在网上搜索了一下,居然没有相关问题的贴子。我想念什么吗?提前致谢。

我通过逐块读取文件而不是使用 cElementTree 解析文件来解决这个问题。我的标签接近文件末尾,所以根据 this answer,我使用 file.seek 从文件末尾一次读取指定大小 block_size 的上下文块和 file.read 方法,以及 line = f.read(block_size),然后简单地使用 "<my_tag " in line(或更具体的标签名称以避免歧义)来检查标签是否存在。这比使用 iterparse 遍历所有标签要快得多。