如何强制ElementTree在每次更改时写入磁盘?

时间:2013-09-03 14:58:49

标签: python elementtree

我必须处理从大型数据库创建的巨大XML文件。

从数据库结构中我生成了一个XML树,但它最终占用了我所有的内存(现在超过10GB),因此该过程永远不会结束,因为系统无法处理任何新的查询。

我认为解决方案是避免将所有XML结构保存到内存中,并在每次添加新内容时将其直接转储到磁盘中。

这是我真正可以做的吗?怎么样?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定您的代码究竟是如何工作的,但它肯定是可以完成的。根据结构的不同,您可以创建时间戳并将传入数据与旧数据进行比较,也可以扫描文件以确定是否已添加当前XML。之后(假设其新代码),您可以执行以下操作:

path = "path/"
name = "fileName"

xmlRoot = Element("root")#create a root element for the xml structure
xmlSub = SubElement(xmlRoot,"sub")
subName = SubElement(xmlCard,"name")
subName.text = "element text"

saveName = path + name + ".xml" #constructs location of xml file (path/fileName.xml)
tree = ElementTree(xmlRoot) #compiles the tree
tree.append(saveName) #appends to specified file

这将在名为“fileName.xml”

的文件夹“path”中的文档中输出以下内容
<root>
    <sub>
        <name>element text</name>
    </sub>
</root>

如果要扫描XML文档以查找对象,请执行以下操作:

xml = parse("path/fileName.xml")
nameList = xml.findall("sub/name") #find all objects in <name> brackets
for i in nameList:
    i.text #convert item in the list to a readable string
    #do comparison here

我希望这有帮助!快乐的编码!