相关疑难解决方法(0)

Python使用cElementTree.iterparse解析XML的内存不足

我的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)和堆栈跟踪而不是段错误.但为什么会崩溃?

python memory-leaks memory-management elementtree

19
推荐指数
2
解决办法
1万
查看次数

在Python中解析XML的最快方法

我正在尝试找到从智能手机解析传感器数据的最快方法,以用于实时应用程序.格式如下所示:

<?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)

可用的传感器数据可能会因手机而异.但是一旦建立连接,包的结构就不会改变,因此可能会跳过部分解析.

python xml xml-parsing

5
推荐指数
1
解决办法
1万
查看次数

XSLT 1.0 (xsltproc) - 无法解析巨大的 XML

我正在尝试使用 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。

我该如何解决这个问题?

xml xslt libxml2 xslt-1.0 xml-parsing

5
推荐指数
1
解决办法
1194
查看次数

Iterparse对象接下来没有属性

我正在解析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 memory celementtree iterparse

4
推荐指数
1
解决办法
3421
查看次数