我有一些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” - &gt;字符串,“2.31” - &gt;漂浮,等等。
我需要这个功能,因为我需要从XML数据中创建SQLite表,如
CREATE table ABC (Processor string, ClockSpeed float ... )
答案 0 :(得分: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
当然,当您使用与Python完全相同的语法约定时,这是特别可取的 - 例如,接受'0x7e'
作为int
以及'126'
,等等上。如果您需要不同的语法约定,那么您应该通过RE或其他方式对字符串s
执行解析。
答案 1 :(得分: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'
这只是一个非常基本的尝试 - 有更复杂的格式来表达可能的数字;如果你认为你可能期望一些更复杂的格式,你必须扩展它以使其在所有情况下都能正常工作。
答案 2 :(得分:0)
BeautifulSoup是一个很好的HTML / XML解析器:
http://www.crummy.com/software/BeautifulSoup/
我不完全确定它是否可以在给定xsd / xsl的情况下按类型转换数据,但它可以检测编码,因此可能有一个开始。