Python xml:从iterparse元素获取父属性
我有一个很大的XML文件,其中包含如下条目Python xml:从iterparse元素获取父属性,python,xml,numpy,xml-parsing,Python,Xml,Numpy,Xml Parsing,我有一个很大的XML文件,其中包含如下条目 <data num_entries="1000000000"> <item value="3.1324213213"></item> <item value="6.2432343213"></item> <!-- ... --> </data> 这是可行的,但速度相当慢,因为项是逐位分配的。我想使用周围数据块的num\u条目信息首先分配数组,例如 i
<data num_entries="1000000000">
<item value="3.1324213213"></item>
<item value="6.2432343213"></item>
<!-- ... -->
</data>
这是可行的,但速度相当慢,因为项是逐位分配的。我想使用周围数据
块的num\u条目
信息首先分配数组,例如
items = None
k = 0
for event, elem in ET.iterparse(filename):
if elem.tag == 'item':
if items is None:
num_entries = get_num_entries_somehow()
items = numpy.empty(num_entries)
items[k] = float(elem.attrib['value'])
k += 1
elem.clear()
不幸的是,iterparse
只有在所有项
都被迭代之后才能访问父元素
如何使用iterparse()
访问父属性?您可以通过以下方式从xml的根目录中获取num\u条目
:
tree = ET.ElementTree(file=filename)
root = tree.getroot()
print(root.attrib.get('num_entries'))
^上述方法将一次解析所有树,这是不好的
启用start
事件如何
for event, elem in ET.iterparse(filename, events=('start', 'end')):
if elem.tag == 'data' and event == 'start':
print(elem.attrib['num_entries'])
if elem.tag == 'item' and event == 'start':
items.append(float(elem.attrib['value']))
elem.clear()
不是一种选择;文件太大,无法立即解析。我已经在行动中澄清了。啊,我现在明白了。如果没有events=('start','end')
,解析器将只在末尾进行解析,它将在前后访问条目。正是我需要的。非常感谢。
for event, elem in ET.iterparse(filename, events=('start', 'end')):
if elem.tag == 'data' and event == 'start':
print(elem.attrib['num_entries'])
if elem.tag == 'item' and event == 'start':
items.append(float(elem.attrib['value']))
elem.clear()