我的XML解析函数的简化版本在这里:
import xml.etree.cElementTree as ET
def analyze(xml):
it = ET.iterparse(file(xml))
count = 0
for (ev, el) in it:
count += 1
print('count: {0}'.format(count))
Run Code Online (Sandbox Code Playgroud)
这会导致Python耗尽内存,这并没有多大意义.我实际存储的唯一东西是count,一个整数.为什么这样做:

看到内存和CPU使用率突然下降?这是Python的惊人崩溃.至少它给了我一个MemoryError(取决于我在循环中做了什么,它给了我更多随机错误,比如一个IndexError)和堆栈跟踪而不是段错误.但为什么会崩溃?
我正在尝试找到从智能手机解析传感器数据的最快方法,以用于实时应用程序.格式如下所示:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<NodeId>0</NodeId>
<Accelerometer>
<Accelerometer1>-.1875240802764893</Accelerometer1>
<Accelerometer2>4.6734819412231445</Accelerometer2>
<Accelerometer3>8.312667846679688</Accelerometer3>
</Accelerometer>
<Gyroscope>
<Gyroscope1>-0.10551923513412476</Gyroscope1>
<Gyroscope2>0.009592439979314804</Gyroscope2>
<Gyroscope3>0.019185146316885948</Gyroscope3>
</Gyroscope>
<Gravity>
<Gravity1>-1.2976515293121338</Gravity1>
<Gravity2>3.672762393951416</Gravity2>
<Gravity3>9.003327369689941</Gravity3>
</Gravity>
<TimeStamp>1377767599250</TimeStamp>
Run Code Online (Sandbox Code Playgroud)
可用的传感器数据可能会因手机而异.但是一旦建立连接,包的结构就不会改变,因此可能会跳过部分解析.
我正在尝试使用 xsltproc 解析一个 13,00,000 行长、大小为 56 MB 的输入 xml 文件。我收到以下错误:
input.xml:245393: parser error : internal error: Huge input lookup
"description" : "List of values for possible department codes"
^
unable to parse input.xml
Run Code Online (Sandbox Code Playgroud)
我的 xsltproc 能够处理一个 9,30,000 行长、大小为 48 MB 的 xml 文件。
事实上,我尝试通过删除不必要的部分将 xml 行减少到 600,000 行。尽管如此,还是出现同样的错误,这很奇怪,因为它能够解析 900,000,但不能解析 600,000。
我该如何解决这个问题?
我正在解析700mb文件,我有以下代码在我的测试文件上工作正常,没有行context.iter(context)和事件,elem = context.next().
form xml.etree import cElementTree as ET
source = ("AAT.xml")
context = iter(context)
event, root = context.next()
for event, elem in context:
if event == event("end"):
some processing...
elem.clear()
root.clear()
Run Code Online (Sandbox Code Playgroud)
然而,当我继续iterparse 700mb文件它仍然崩溃.阅读:
清除()树时使用ElementTree.iterparse()时内存使用量是否会增加?
我相信这是因为我需要清除root,但是我已经遵循了上面已经包含的一些教程我不断收到错误:
line 9, in <module>
event, root = context.next()
AttributeError: 'iterparse' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)
我还是Python的新手,我无法理解为什么会发生这种情况,据我所知,我与这些例子一致.
python ×3
xml ×2
xml-parsing ×2
celementtree ×1
elementtree ×1
iterparse ×1
libxml2 ×1
memory ×1
memory-leaks ×1
xslt ×1
xslt-1.0 ×1