0

我正在尝试学习如何在 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 中做到这一点。如果可以的话。

4

3 回答 3

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 编写的,因此如果您将鼠标移到右下角,您会看到 << 和 >> 按钮,一个 Ø 按钮可以将整个演示文稿视为一个可打印的网页,以及一个用于跳转的组合框到特定页面。

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

于 2012-08-10T22:27:39.897 回答
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))

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

于 2012-08-10T21:51:07.180 回答
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('=')

拆分整个命令并获取参数:

<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>"]
于 2012-08-11T14:08:56.277 回答