Пипарсинг: получение результатов из проанализированных данных

StackOverflow https://stackoverflow.com/questions/4526026

  •  13-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь проанализировать немного SQL заявления (CREATE TABLE точно) с использованием pyparsing. Анкет Как для имени базы данных, так и для таблицы таблицы я создал идентификаторы:

identifier = (Combine(Optional('"') + Word(alphanums) + 
                      ZeroOrMore('_' + Word(alphanums)) + 
                      Optional('"')) & ~keywords_set)

database_name = identifier.setResultsName('database_name')
table_name = identifier.setResultsName('table_name')

Я также использую этот метод анализа:

def parse(self, sql):
    try:
        tokens = self.create_table_stmt.parseString(sql)
        print tokens.database_name, tokens.table_name
        values = tokens.database_name, tokens.table_name
        print values
        return values
    except ParseException as error:
        print error

Для следующего ввода:

    CreateTableParser().parse('''
CREATE TABLE "django"."django_site1" (
)''')

я получил:

['"django"'] ['"django_site1"']
((['"django"'], {}), (['"django_site1"'], {}))

Почему они разные? Как я могу просто получить результат в первую очередь, как простые списки? Я получаю его только тогда, когда печатаю эти значения.

Это было полезно?

Решение

Есть разница между print a, b а также print (a,b):

>>> a, b = "ab"
>>> a
'a'
>>> b
'b'
>>> print a, b
a b
>>> print (a, b)
('a', 'b')

print a, b отпечатки два объекты a а также b. print (a, b) печатает один объект кортеж a, b:

>>> w = sys.stdout.write
>>> _ = w(str(a)), w(' '), w(str(b)), w('\n')
a b
>>> _ = w(str((a,b))), w('\n')
('a', 'b')

Или по -другому:

>>> class A:
...    def __str__(self):
...        return '1'
...    def __repr__(self):
...        return 'A()'
... 
>>> print A(), A()
1 1
>>> print (A(), A())
(A(), A())

__str__ метод вызывается, когда вы делаете str(obj). Анкет Если нет __str__ метод тогда __repr__ Метод называется repr(obj).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top