我必须处理从大型数据库创建的巨大XML文件。
从数据库结构中我生成了一个XML树,但它最终占用了我所有的内存(现在超过10GB),因此该过程永远不会结束,因为系统无法处理任何新的查询。
我认为解决方案是避免将所有XML结构保存到内存中,并在每次添加新内容时将其直接转储到磁盘中。
这是我真正可以做的吗?怎么样?
谢谢!
答案 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
我希望这有帮助!快乐的编码!