【发布时间】:2020-04-14 12:26:30
【问题描述】:
我一直在编写一些脚本来将大量 XML 数据从格式 1 转换为格式 2,以允许数据在系统之间迁移。我在 Windows 10 上使用 Python 3.8。
这是一次性的工作。有大量的数据不兼容,我必须在两个系统上进行逆向工程,以使数据兼容并手动转换大部分 XML 字段。学习 XLST 对于一项工作来说曲线太大了,我没有 SQL 经验来做这件事。
在输出字符串达到我认为大约 86MB 之前一切都很顺利(限制可能比这个小很多,但它是第一个失败的文件)。
我已经使用 xml.etree.Elemtree 构建了 XML。
我需要打印漂亮的 XML 输出,并借用了我在 stackoverflow 上找到的使用 minidom 的美化函数:Use xml.etree.elementtree to print nicely formatted xml files - 复制到这里:
def prettify(elem):
"""Return a pretty-printed XML string for the Element.
"""
rough_string = tostring(elem, 'ISO-8859-1')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
我的写入文件功能:
def write_to_file(root_xml,filenumber):
# Simply write the XML to the output folder
file = open(outputxml + "\\" + filenumber + ".xml","w",encoding="UTF-8")
file.write(prettify(root_xml))
file.close
return
我的错误: 文件“C:\\mycode.py”,第 501 行,在 write_to_file file.write(美化(root_xml)) 内存错误
我了解到 minidom 不是处理数据的好方法,而且我可能不应该在内存中创建整个 XML。我即将到来的最大 XML 可能约为 250MB,甚至可能更高,而且我无法编写 86MB 的字符串。这似乎是一个简单的问题,但我被卡住了。
有没有好的解决方法?我真的希望不必重新设计大量代码来分块编写 XML 输出。有没有一种简单的方法可以将字符串分解成更小的部分,然后写入文件?其他想法?
谢谢!
【问题讨论】: