如果有任何方法可以用unstagle /python解析XML文件(大小= 600M),请告诉我。事实上,我使用的是untangle.parse(file.xml),我得到了错误信息:进程已完成,退出代码为137
例如,有没有办法通过块或untangle.parse()函数使用的其他选项或特定的linux配置来解析这个文件?
谢谢
发布于 2017-03-23 18:15:23
您可以使用xml模块sax(Simple API for XML)解析器。
SAX是一种基于的XML流上下文,文档以线性方式的进行处理。
当XML树消耗太多内存时,这是有利的,因为通常的DOM实现使用10字节的内存来表示1字节的。
执行以下操作的示例代码:
import xml.sax
def stream_gz_decompress(stream) :
dec = zlib.decompressobj(32 + zlib.MAX_WBITS)
for chunk in stream :
rv = dec.decompress(chunk)
if rv :
yield rv
class stream_handler(xml.sax.handler.ContentHandler) :
last_entry = None
last_name = None
def startElement(self, name, attrs) :
self.last_name = name
if name == 'item':
self.last_entry = {}
elif name != 'root' and name != 'updated' :
self.last_entry[name] = {'attrs': attrs, 'content': ''}
def endElement(self, name):
if name == 'item':
# YOUR APPLICATION LOGIC GOES HERE
self.last_entry = None
elif name == 'root':
raise StopIteration
def characters(self, content):
if self.last_entry:
self.last_entry[self.last_name]['content'] += content
parser = xml.sax.make_parser()
parser.setContentHandler(stream_handler())
with open(os.path.basename('FILENAME'), "rb") as local_file:
for data in stream_gz_decompress(local_file):
parser.feed(data)发布于 2017-03-23 18:26:47
可以使用带有untangle的sax?,这意味着我通过sax加载文件并通过untangle读取它,因为我有很多使用untagle编写的代码,并且我已经开发了很长时间,我不想从头开始,谢谢
https://stackoverflow.com/questions/42972563
复制相似问题