python - pyparsing:从解析的数据中获取结果

标签 python pyparsing

我正在尝试使用 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, bprint (a,b) 的区别:

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

print a, b 打印两个 对象abprint (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/

相关文章:

python - Django 中的空白 URL 模式

python - 识别列表python中最不常见的数字

python - 在 csv 文件中的所有行组合中应用字符串匹配逻辑

python - 去除标签内容之外的文本

python - 标记嵌套表达式但忽略带空格的引用字符串

python - Django 购物车/购物篮解决方案(或者我应该 DIM)?

python - 使 python 脚本在 x 秒不活动后退出

python - pyparsing命令行字符串与行延续

不使用 HTML 标签的 Pyparsing 问题抓取网站

python - 如何使用 pyparsing 构建简单的 AST