您可以使用iterparse方法来处理大型xml文件。但是,文件的结构特别简单。使用iterparse将是不必要的复杂。在
我将在一个脚本中提供两个答案。我通过演示如何使用lxml解析xml中的行来直接回答您的问题,并且我提供了我认为使用regex可能是更好的答案。在
代码读取xml中的每一行,并忽略那些不以“try…”开头的行。。。除了。当脚本找到这样一行时,它将它从lxml传递给etree进行解析,然后显示该行的属性。然后它使用正则表达式解析出相同的属性并显示它们。在
我强烈怀疑正则表达式会更快。在>>> from lxml import etree
>>> report = '''\
...
...
...
...
...
...
... '''
>>> import re
>>> re.search(r'name="([^"]*)"\s+surname="([^"]*)', line).groups()
('John', 'Smith')
>>> for line in report.split('\n'):
... if line.strip().startswith('
... tree = etree.fromstring(line.replace('>', '/>'))
... tree.attrib['name'], tree.attrib['surname']
... re.search(r'name="([^"]*)"\s+surname="([^"]*)', line).groups()
...
('John', 'Smith')
('John', 'Smith')
('Michael', 'Smith')
('Michael', 'Smith')
('Nick', 'Smith')
('Nick', 'Smith')