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

構文解析は、あなたが説明するようなパーサーを作成するための、単純な純粋なPython、小さなフットプリント、自由にライセンスされたモジュールです。これは、PyCon'06(Texas Python UnConference、2008用に更新)で行ったプレゼンテーションの2つです。1つは、pyparsing自体の紹介であり、もう1つは、単純なコマンド言語(テキストアドベンチャーゲーム)の解析と実行にpyparsingを使用するデモです。 )。

Pyparsingの概要-http ://www.ptmcg.com/geo/python/confs/TxUnconf2008Pyparsing.html

シンプルなアドベンチャーゲームコマンドパーサー-http ://www.ptmcg.com/geo/python/confs/pyCon2006_pres2.html

どちらのプレゼンテーションもS5を使用して記述されているため、右下隅にマウスを置くと、<<ボタンと>>ボタン、プレゼンテーション全体を1つの印刷可能なWebページとして表示するØボタン、ジャンプするコンボボックスが表示されます。特定のページに。

pyparsingの詳細については、http: //pyparsing.wikispaces.comを参照してください。

于 2012-08-10T22:27:39.897 に答える
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 に答える
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 に答える