Python字符串解释和解析

时间:2012-08-10 21:37:40

标签: python string syntax command interpretation

我正在尝试学习如何在python中解释和解析字符串。我想制作一个“字符串命令”(不知道是否是正确的表达式)。但为了更好地解释,我将举一个例子:我想要一个像SQL一样的命令,其中有一个带有关键字的字符串,可以让一个进程按照要求进行操作。像这样:cursor.execute("UPDATE Cars SET Price=? WHERE Id=?", (50000, 1))。但我想为我的项目创建一个这样的格式(没有必要使用sql):mydef("U={Cars[Price=50000], Id=1}")

Syntax table: <command>={<table>[<value name>=<value (int/str/float/bool)>], <id>=<value to id>}
Where command is: U=update, C=create, S=select, I=insert, D=delete

好吧,我真的想学习如何在Python中完成它。如果可能的话。

3 个答案:

答案 0 :(得分:1)

Pyparsing是一个简单的纯Python,占用空间小,自由许可的模块,用于创建与您描述的解析器类似的解析器。以下是我在PyCon'06上给出的一些演示文稿(针对Texas Python UnConference,2008更新),一个是对pyparsing本身的介绍,另一个是使用pyparsing进行解析和执行简单命令语言的演示(文本冒险游戏) )。

Pyparsing简介 - http://www.ptmcg.com/geo/python/confs/TxUnconf2008Pyparsing.html

一个简单的冒险游戏命令解析器 - http://www.ptmcg.com/geo/python/confs/pyCon2006_pres2.html

两个演示文稿都是使用S5编写的,所以如果你鼠标移到右下角,你会看到&lt;&lt;和&gt;&gt;按钮,一个Ø按钮,可将整个演示文稿视为单个可打印的网页,以及一个跳转到特定页面的组合框。

您可以在http://pyparsing.wikispaces.com找到有关pyparsing的更多信息。

答案 1 :(得分:0)

为了清楚起见,你知道Python2.5 +包含sqlite吗?

import sqlite3
conn = sqlite3.connect(dbname.db)
curs = conn.cursor()
curs.execute("""CREATE TABLE Cars (UID INTEGER PRIMARY KEY, \
        "Id" VARCHAR(42), \
        "Price" VARCHAR(42))""")
curs.execute("UPDATE Cars SET Price=? WHERE Id=?", (50000, 1))

编辑添加:我实际上没有测试过这个;你至少需要一个插入语句来使这项工作。

答案 2 :(得分:0)

我做了这段代码,我不知道这是否有效。只是想要这个意见。

>>> s = '<command>={<table>[<value name>=<value>], <id>=<value id>}'
>>> s1 = s.split('=', 1)
>>> s2 = s1[1].split(',', 1)
>>> s2 = s1[1].replace('{', '').replace('}', '').split(',', 1)
>>> s3 = s2[0].replace(']', '').split('[')
>>> s4 = s3[1].split('=')
>>> s1
['<command>', '{<table>[<value name>=<value>], <id>=<value id>}']
>>> s2
['<table>[<value name>=<value>]', ' <id>=<value id>']
>>> s3
['<table>', '<value name>=<value>']
>>> s4
['<value name>', '<value>']
>>> s5 = s2[1].split('=')

拆分整个命令并获取args:

<command>={<table>[<value name>=<value>],<id>=<value id>}
["<command>", "{<table>[<value name>=<value>],<id>=<value id>}"]
["<table>[<value name>=<value>]", "<id>=<value id>"]
["<table>", "<value name>=<value>"]
["<value name>", "<value>"]
["<id>", "<value id>"]