当前位置: 首页 > 面试题库 >

解析和计数仅数字xml文本,包括e-00或e + 01

韩涵衍
2023-03-14
问题内容

我是python新手。我正在尝试解析一个xml文件,并使用e-或e +计算所有数字输入的所有文本,包括近似值。例如,鉴于下面的伪代码(jerry.xml),

<data>
<country name="Liechtenstein">
    <rank updated="yes">2</rank>
    <language>english</language>
    <currency>1.21$/kg</currency> 
    <gdppc>141100</gdppc>
    <gdpnp>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>59900</gdppc>
    <gdpnp>5.2e-015</gdpnp>
    <neighbor name="Malaysia" direction="N"/>
</country>

我想返回6,计算了2、141100、2.304e + 0150、5、59900和5.2e-015,而忽略了英文,1.21 $ / kg或4.1 $ /
kg。

任何帮助,将不胜感激。现在,我有以下内容。

import xml.etree.ElementTree as ET
tree = ET.parse("jerry.xml")
root = tree.getroot()
for text in root.itertext():
    print repr(text)   
charlie = file.writelines(root.itertext())
count = sum(element.firstChild.nodeValue.find(r'\d+$'') for element in xmldoc.getElementsByTagName('jerry.xml'))

问题答案:

您可以简单地尝试将每个内部文本元素转换为浮点数,并忽略任何错误。

import xml.etree.ElementTree as ET

tree = ET.parse("temp.txt")
root = tree.getroot()
nums = []

for e in root.itertext():
    try:
        nums.append(float(e))
    except ValueError:
        pass

print nums
print len(nums)

根据要求,跟踪元素位置的方法可能是效率低下但成功的方法:

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('temp.txt')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums

for n in nums:
    print n[0], n[1]


 类似资料:
  • 009. Palindrome Number[E] 问题: Determine whether an integer is a palindrome. Do this without extra space. 思路 这里说不用额外的空间意思是不用O(n)的空间,O(1)的还是可以用的,不然循环都不好写。。 思路1 简单的思路 就是把数字逆转,然后判断逆转后的数字跟原来数字是不是一样的。 class

  • E.2.1 介绍 包含头文件: !include "TextFunc.nsh" 包含函数 "LineRead" 用于安装和 "TrimNewLines" 用于卸载: !insertmacro LineRead !insertmacro un.TrimNewLines 调用函数: Section Install ${LineRead} "C:\a.log" "-1" $R0

  • 问题内容: 在Enum教程中找到 从打印结果::是什么意思?我不认为这是原始数据类型。 问题答案: 它是科学计数法的指数-因此值为2.4397 x 10 6。 有关浮点字面量的精确详细信息,请参见JLS第3.10.2节。

  • 它被转回为“result”变量的值-46,我预期为0.0,认为“float f=I”将转换为1234567890.0,而不是1.23456794 e9。为了理解它,我已经注意到,因为浮点类型最多只允许在基点前7位,如果在基点前输入一个超过7位的浮点,编译器将在该字符串的第二个索引位置输出一个由基点组成的字符串,在倒数第二个索引位置返回一个“e”或“e”。是什么?“e”是什么意思?

  • E.1.1 介绍 包含头文件: !include "FileFunc.nsh" 包含用于安装的 "GetFileExt" 函数和用于卸载的 "GetParent" 函数: !insertmacro GetFileExt !insertmacro un.GetParent 调用函数: Section Install ${GetFileExt} "C:\我的下载\Index.ht

  • 007. Reverse Integer[E]——处理溢出的技巧 题目 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 思路 这题完全没丝毫的难度,任何人几分钟都可以写出来,但是,这题修改后,加入了一个新的测试,瞬间大家讨论的就多了,就是——溢出测试 因为整数只有