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

2024-10-01 04:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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双核处理器4400+2.31 GHz”->;字符串、“2.31”->;浮点型,等等。在

我需要这个功能,因为我需要用XML数据制作SQLite表

^{pr2}$

Tags: 字符串标记gtxmlprocessortmx2amd
3条回答

一种可能是按精确的顺序尝试各种类型,如果这些类型都不起作用,则默认为str。E、 g.:

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

当然,当您使用want与Python完全相同的语法约定时,这一点尤其可取,例如,接受'0x7e'作为int以及{},依此类推。如果需要不同的语法约定,那么应该对字符串s执行解析,不管是通过REs还是通过其他方式。在

BeautifulSoup是一个很好的HTML/XML解析器:

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

我不完全确定它是否可以根据xsd/xsl的类型转换数据,但它可以检测编码,所以可能会有一个开始。在

根据您期望的格式类型,您可以使用正则表达式来检测浮点和整数,然后假设任何无法解析为数字的内容都是字符串,如下所示:

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'

这只是一个非常基本的尝试-有更复杂的格式来表达数字是可能的;如果你认为你可能期望一些更复杂的格式,你必须扩展它,使它在所有情况下都能正常工作。在

相关问题 更多 >