2012-08-10 134 views
0

我想学习如何解释和解析python中的字符串。我想做一个“字符串命令”(不知道是否是正确的表达)。但要更好地解释我将举一个例子:我需要一个类似于SQL的命令,其中有一个关键字字符串,它将使进程执行所要求的操作。像这样:cursor.execute("UPDATE Cars SET Price=? WHERE Id=?", (50000, 1))。但是,我要创建我的项目像这样的格式(这是没有必要与SQL):mydef("U={Cars[Price=50000], Id=1}")Python的字符串解释和解析

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。如果可能的话。

+1

你可能想阅读了关于文法和第一解析。看看他们的维基百科文章。 – Johan 2012-08-10 21:43:44

+1

请参阅[Python解析工具](http://nedbatchelder.com/text/python-parsers.html)。 – jfs 2012-08-10 22:39:55

回答

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)) 

编辑补充:我没有真正测试这个;你至少需要一个插入语句来完成这个工作。

+0

我知道,但我真的需要这种数据库处理方式。 – 2012-08-10 22:09:57

1

Pyparsing是一个简单的纯Python,小尺寸,自由许可的模块,用于创建类似于您所描述的解析器。下面是我在PyCon'06(为德克萨斯州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,因此如果你的鼠标到右下角,你会看到< <和>>按钮,Ø按钮将整个演示文稿视为单个可打印的网页,以及用于跳转到特定页面的组合框。

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

+0

这个pyparsing与 .split没有什么不同,但简化了这个过程。如果我错了,请纠正。 – 2012-08-11 14:02:55

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>"]