检查 ElementTree 的每个值
Check every value of an ElementTree
我正在使用 python 中的 ElementTree 解析 XML,我必须检查我的树中的每个浮点数是否都带有“,”而不是“。”但我不知道如何到达我的树的每个 child,它是从 xml 的 +100K 行创建的,非常大。
这是一个非常短的样本但是:
<example tr="3,1">
<test>2.1</test>
<stack>
<nb>2,5</nb>
<nb>5.1</nb>
</stack>
</example>
我想检查任何浮点值是否带有逗号或点。我的问题是用任何树达到树的每个值。
到目前为止我试过这个:
tree = ET.parse(chemin, parser=LineNumberingParser())
root = tree.getroot()
float_text_info = []
for element in root.getiterator():
if element is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
通过ElementTree
我们可以通过以下方式进行:
- 创建
xml.etree.ElementTree.Element
的根对象。
- 通过
getiterator()
方法迭代输入中的每个元素。
- 使用
re
检查文本是由 . or ,
分隔的数字。
- 如果是,则添加到结果列表。
- 显示结果列表。
演示:
>>> data = """
... <example tr="3,1">
... <test>2.1</test>
... <stack>
... <nb>2,5</nb>
... <nb>5.1</nb>
... </stack>
... </example> """
>>>
>>>
>>> import xml.etree.ElementTree as PARSER
>>> import re
>>>
... root = PARSER.fromstring(data)
>>>
>>> float_text_info = []
>>> for element in root.getiterator():
... element_value = element.text.strip()
... if element_value and re.findall('\d+[\.|,]\d+', element_value):
... float_text_info.append(element_value)
...
...
>>> print "float_text_info:", float_text_info
float_text_info: ['2.1', '2,5', '5.1']
异常处理当XML中有注释时。
try:
element_value = element.text.strip()
except:
continue
或:
最好检查元素是否 None。
for element in root.getiterator():
if element is not None and element.text is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
注:
- 这是基本代码,您可以根据自己的算法条件进行修改。
- 使用
lxml
库解析xml数据。
- 做必要的异常处理。
我正在使用 python 中的 ElementTree 解析 XML,我必须检查我的树中的每个浮点数是否都带有“,”而不是“。”但我不知道如何到达我的树的每个 child,它是从 xml 的 +100K 行创建的,非常大。
这是一个非常短的样本但是:
<example tr="3,1">
<test>2.1</test>
<stack>
<nb>2,5</nb>
<nb>5.1</nb>
</stack>
</example>
我想检查任何浮点值是否带有逗号或点。我的问题是用任何树达到树的每个值。
到目前为止我试过这个:
tree = ET.parse(chemin, parser=LineNumberingParser())
root = tree.getroot()
float_text_info = []
for element in root.getiterator():
if element is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
通过ElementTree
我们可以通过以下方式进行:
- 创建
xml.etree.ElementTree.Element
的根对象。 - 通过
getiterator()
方法迭代输入中的每个元素。 - 使用
re
检查文本是由. or ,
分隔的数字。 - 如果是,则添加到结果列表。
- 显示结果列表。
演示:
>>> data = """
... <example tr="3,1">
... <test>2.1</test>
... <stack>
... <nb>2,5</nb>
... <nb>5.1</nb>
... </stack>
... </example> """
>>>
>>>
>>> import xml.etree.ElementTree as PARSER
>>> import re
>>>
... root = PARSER.fromstring(data)
>>>
>>> float_text_info = []
>>> for element in root.getiterator():
... element_value = element.text.strip()
... if element_value and re.findall('\d+[\.|,]\d+', element_value):
... float_text_info.append(element_value)
...
...
>>> print "float_text_info:", float_text_info
float_text_info: ['2.1', '2,5', '5.1']
异常处理当XML中有注释时。
try:
element_value = element.text.strip()
except:
continue
或:
最好检查元素是否 None。
for element in root.getiterator():
if element is not None and element.text is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
注:
- 这是基本代码,您可以根据自己的算法条件进行修改。
- 使用
lxml
库解析xml数据。 - 做必要的异常处理。