我正在尝试使用 pyparsing
解析一些 SQL
语句(完全是 CREATE TABLE
)。对于数据库名称和表表,我都创建了标识符:
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)
。
关于python - pyparsing:从解析的数据中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4526026/