嗨,我有一个简单的graphML文件,我想从graphML中删除node标记并将其保存到另一个graphML文件中。图的大小是3GB以下给出的是示例。在
输入文件:
<?xml version="1.0" ?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd">
<key id="weight" for="edge" attr.name="weight" attr.type="string"></key>
<graph id="G" edgedefault="directed">
<node id="1"></node>
<node id="2">
</node>
<node id="3">
</node>
<node id="4">
</node>
<node id="5">
</node>
<edge id="6" source="1" target="2">
<data key="weight">3</data>
</edge>
<edge id="7" source="2" target="4">
<data key="weight">1</data>
</edge>
<edge id="8" source="2" target="3">
<data key="weight">9</data>
</edge>
</graph>
</graphml>
所需输出:
^{pr2}$有什么方法可以做到这一点吗?在
有一个python模块来处理graphml。 奇怪的是,documentation没有
remove
或delete
函数。在因为graphml是xml标记,所以可以改用xml模块。 我用过xmltodict,非常喜欢。 此模块允许您将xml代码加载到python对象。修改对象后,可以将其保存回xml。在
如果
data
是包含xml的字符串:这将删除
node
项,unparse将返回一个包含xml的字符串。在如果xml的结构变得更复杂,则需要搜索
data_object
中的节点。但这不应该是个问题,它只是一本有序的字典。在另一个问题可能是xml的大小。3GB是很多。 xmltodict确实支持大文件的流模式,但这是我从未使用过的。在
在阅读了一些链接之后,我想出了迭代解析的解决方案。但是,我无法从RAM使用方面找出简单解析和iterparse之间的区别。在
重要链接:
-http://www.ibm.com/developerworks/xml/library/x-hiperfparse/
-using lxml and iterparse() to parse a big (+- 1Gb) XML file
代码:
进口lxml.etree作为et
相关问题 更多 >
编程相关推荐