Определить тип данных из строки XML, используя python - PullRequest
0 голосов
/ 12 июля 2010

У меня есть несколько строк с тегами 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 ГГц» -> строка, «2,31» -> с плавающей точкой и т.из XML-данных что-то вроде

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

Ответы [ 3 ]

3 голосов
/ 12 июля 2010

Одна из возможностей - попробовать различные типы в точной последовательности, по умолчанию 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, либо через RE, либо другими способами.

2 голосов
/ 12 июля 2010

В зависимости от ожидаемых типов форматов вы можете использовать регулярные выражения для обнаружения чисел с плавающей запятой и целых чисел, а затем предположить, что все, что не может быть проанализировано в число, является строкой, например:

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'

Это просто базовый удар - существуют более сложные форматы для выражения возможных чисел; если вы думаете, что можете ожидать некоторых из более сложных форматов, вам придется расширить это, чтобы оно работало должным образом во всех случаях.

0 голосов
/ 12 июля 2010

BeautifulSoup - хороший синтаксический анализатор HTML / XML:

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

Я не совсем уверен, может ли он преобразовывать данные по типу с помощью xsd / xsl, но он может обнаруживать кодировку, поэтому может возникнутьначало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...