使用Python从XML字符串检测数据类型
我有一些带有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)或者其他方法。