2012-08-10 133 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>"]