标签: iterparse

Python:xPath 在 ElementTree 中不可用

我尝试使用iterparse()of解析 iTunes 播放列表ElementTree,但出现以下错误:

AttributeError: 'Element' object has no attribute 'xpath'
Run Code Online (Sandbox Code Playgroud)

代码如下:

import xml.etree.ElementTree as ET
context = ET.iterparse(file,events=("start", "end"))
    # turn it into an iterator
    context = iter(context)
    # get the root element
    event, root = context.next()
    for event, elem in context:
        z = elem.xpath(".//key")
        elem.clear()
        root.clear()
    print z
Run Code Online (Sandbox Code Playgroud)

我做错了什么?文件太大了,无论如何我都必须使用iterparse()

python elementtree xml-parsing python-2.7 iterparse

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

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
查看次数

xml.etree.ElementTree iterparse()仍然使用大量内存?

我一直在尝试使用iterparse来减少需要处理大型XML文档的脚本的内存占用.这是一个例子.我编写了这个简单的脚本来读取TMX文件并将其拆分为一个或多个输出文件,不超过用户指定的大小.尽管使用iterparse,当我将886MB文件拆分为100MB文件时,脚本会以所有可用内存运行(使用我的8MB中的6.5进行爬行).

难道我做错了什么?为什么内存使用量如此之高?

#! /usr/bin/python
# -*- coding: utf-8 -*-
import argparse
import codecs
from xml.etree.ElementTree import iterparse, tostring
from sys import getsizeof

def startNewOutfile(infile, i, root, header):
    out = open(infile.replace('tmx', str(i) + '.tmx'), 'w')
    print >>out, '<?xml version="1.0" encoding="UTF-8"?>'
    print >>out, '<!DOCTYPE tmx SYSTEM "tmx14.dtd">'
    print >>out, roottxt
    print >>out, headertxt
    print >>out, '<body>'
    return out

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-m', '--maxsize', dest='maxsize', required=True, type=float, help='max size (in MB) of output files')
    parser.add_argument(dest='infile', help='.tmx file to be …
Run Code Online (Sandbox Code Playgroud)

python xml elementtree iterparse

3
推荐指数
1
解决办法
1168
查看次数

iterparse 无法解析某个字段,而其他类似的则可以

我使用 Pythoniterparse来解析 nessus 扫描的 XML 结果(.nessus 文件)。对意外记录的解析失败,但类似的记录已被正确解析。

XML 文件的一般结构是很多记录,如下所示:

<ReportHost>
  <ReportItem>
    <foo>9.3</foo>
    <bar>hello</bar>
  </ReportItem>
  <ReportItem>
     <foo>10.0</foo>
     <bar>world</bar>
</ReportHost>
<ReportHost>
   ...
</ReportHost>
Run Code Online (Sandbox Code Playgroud)

换句话说,很多主机(ReportHost)有很多要报告的项目(ReportItem),并且后者具有多个特征(foobar)。我将考虑为每个项目生成一行及其特征。

解析在文件中间的简单行处失败(foo在这种情况下是cvss_base_score

<cvss_base_score>9.3</cvss_base_score>
Run Code Online (Sandbox Code Playgroud)

同时解析了约 200 条相似的行,没有出现任何问题。

相关的代码片段如下——它设置上下文标记(inReportHostinReportEvent告诉我在 XML 文件的限制中的位置,并根据上下文分配或打印一个值)

import xml.etree.cElementTree as ET
inReportHost = False
inReportItem = False

for event, elem in ET.iterparse("test2.nessus", events=("start", "end")):
    if event == 'start' and elem.tag == "ReportHost":
        inReportHost = True
    if event == 'end' …
Run Code Online (Sandbox Code Playgroud)

python xml xml-parsing iterparse

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