解析浮点数和 return 路径,某些属性值除外
Parse floats and return paths except for certain attribute values
我正在尝试解析深度嵌套的 XML 文件的浮点数和 return 此节点的路径(某些属性值除外)。例如。给出下面的文件,我想 return 所有花车但排除某些属性说 month=05 & month=06,
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<language>english</language>
<currency>1.21$/kg</currency>
<gdppc month="06">141100</gdppc>
<gdpnp month="10">2.304e+0150</gdpnp>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<language>english</language>
<currency>4.1$/kg</currency>
<gdppc month="05">59900</gdppc>
<gdpnp month="08">5.2e-015</gdpnp>
<neighbor name="Malaysia" direction="N"/>
</country>
我想 return 2
、2.304e+0150
、5
和 5.2e-015
以及它们的 paths
即省略文本不完全是数字,例如english
、1.21$/kg
或 4.1$/kg
。同时还限制来自属性 month=05
& month=06
的文本,即 141100
和 59900
.
从之前的 post 我有以下获取所有可浮动数字的路径。
def extractNumbers(path, node):
nums = []
path += '/' + node.tag
if 'name' in node.keys():
path += '=' + node.attrib['name']
try:
num = float(node.text)
nums.append( (path, num) )
except (ValueError, TypeError):
pass
for e in list(node):
nums.extend( extractNumbers(path, e) )
return nums
tree = ET.parse('jerry.xml')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums
如何给这个添加属性限制?当我将 node.attrib["month"] in ["05","06"]
添加到 except 函数时,它不起作用。我将不胜感激。
我想你快到了。
如果您添加:
if 'month' in node.attrib:
if node.attrib['month'] in ['05', '06']:
return nums
就在 nums=[]
行之后,它应该完全按照您的要求执行。
在 extend
之前添加它很重要
我正在尝试解析深度嵌套的 XML 文件的浮点数和 return 此节点的路径(某些属性值除外)。例如。给出下面的文件,我想 return 所有花车但排除某些属性说 month=05 & month=06,
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<language>english</language>
<currency>1.21$/kg</currency>
<gdppc month="06">141100</gdppc>
<gdpnp month="10">2.304e+0150</gdpnp>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<language>english</language>
<currency>4.1$/kg</currency>
<gdppc month="05">59900</gdppc>
<gdpnp month="08">5.2e-015</gdpnp>
<neighbor name="Malaysia" direction="N"/>
</country>
我想 return 2
、2.304e+0150
、5
和 5.2e-015
以及它们的 paths
即省略文本不完全是数字,例如english
、1.21$/kg
或 4.1$/kg
。同时还限制来自属性 month=05
& month=06
的文本,即 141100
和 59900
.
从之前的 post 我有以下获取所有可浮动数字的路径。
def extractNumbers(path, node):
nums = []
path += '/' + node.tag
if 'name' in node.keys():
path += '=' + node.attrib['name']
try:
num = float(node.text)
nums.append( (path, num) )
except (ValueError, TypeError):
pass
for e in list(node):
nums.extend( extractNumbers(path, e) )
return nums
tree = ET.parse('jerry.xml')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums
如何给这个添加属性限制?当我将 node.attrib["month"] in ["05","06"]
添加到 except 函数时,它不起作用。我将不胜感激。
我想你快到了。
如果您添加:
if 'month' in node.attrib:
if node.attrib['month'] in ['05', '06']:
return nums
就在 nums=[]
行之后,它应该完全按照您的要求执行。
在 extend