使用Python从XML字符串检测数据类型

0 投票
3 回答
514 浏览
提问于 2025-04-16 01:08

我有一些带有XML标签的字符串,内容如下。

<Processor>AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ 2.31 GHz</Processor>
<ClockSpeed>2.31</ClockSpeed>
<NumberOfCores>2</NumberOfCores>
<InstalledMemory>2.00</InstalledMemory>
<OperatingSystem>Windows 7 Professional</OperatingSystem>

我该如何用Python自动检测数据类型呢?比如说,“AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ 2.31 GHz”这个就是字符串,"2.31"这个则是浮点数,依此类推。

我需要这个功能,因为我想根据XML数据创建一个SQLite表,类似于下面这个。

CREATE table ABC (Processor string, ClockSpeed float ... )

3 个回答

0

BeautifulSoup 是一个很不错的 HTML/XML 解析工具:

http://www.crummy.com/software/BeautifulSoup/

我不太确定它是否能根据 xsd/xsl 转换数据类型,但它可以识别编码,所以这可能是一个开始。

2

根据你预期的数据格式,你可以使用正则表达式来识别浮点数和整数,然后假设那些无法转换成数字的内容就是字符串,像这样:

import re

FLOAT_RE = re.compile(r'^(\d+\.\d*|\d*\.\d+)$')
INT_RE = re.compile(r'^\d+$')

# ... code to get xml value into a variable ...

if FLOAT_RE.match(xml_value):
    value_type = 'float'
elif INT_RE.match(xml_value):
    value_type = 'int'
else:
    value_type = 'string'

这只是一个非常基础的尝试——实际上还有更复杂的数字格式。如果你觉得可能会遇到一些更复杂的格式,你就需要扩展这个方法,以确保在所有情况下都能正常工作。

3

一种方法是按顺序尝试不同的数据类型,如果都不行,就默认用 str(字符串)。比如:

def what_type(s, possible_types=((int, [0]), (float, ()))):
    for t, xargs in possible_types:
        try: t(s, *xargs)
        except ValueError: pass
        else: return t
    return str

当然,这种做法特别适合你想要和 Python 一样的语法规则,比如说,既能把 '0x7e' 识别为 int(整数),也能把 '126' 识别为整数,等等。如果你需要不同的语法规则,那就应该对字符串 s 进行解析,可以用正则表达式(REs)或者其他方法。

撰写回答