2016-10-21 7 views
0

私はtwitter botを構築しています。私はそれと通信している方法はTwitter DMを使用しています。私は階層ルートを持っている簡単なコマンドを持っていたい。例:Pythonで異なるルートを持つコマンドラインを構築するためのベストプラクティス

Follow 
| 
|--> Followers 
|  | 
|  |--> {screen_name} 
|   
| 
|--> {screen_name} 

User 
| 
|--> add 
| 
|--> delete 

Hashtags 
| 
|--> add 
| 
|--> delete 

たとえば、@barackobamaフォロワーのすべてをフォローすると、フォロワーフォロワーはbarackobamaと入力されます。それを解析する最善の方法は何でしょうか?事前に

おかげで、このような単純な例については

+1

「ベスト」は、特にパースのような幅広いテーマで非常に主観的です。これを処理する方法は複数ありますが、他の方法よりも「良い」と考えられるかもしれませんが、「最良」はありません。あなたに何があるのか​​、それにどのような問題があるのか​​教えてください。私たちはあなたを助けることができます。 –

+0

簡単な実装であれば、簡単に多くのコマンドを簡単に追加できます。 – h3y4w

+0

ユーザにあなたのモジュールの内部組織を理解させることは、非生産的なようです。単純にコマンド「フォロワー」を持っていないのはなぜですか? – tripleee

答えて

0

は、私は名前のキャプチャグループで正規表現を使用する傾向があります。

例:1がより多くの添えものを含むクラスを持つ単純なコールバックアクションを置き換えることができ、よりfancynessについては

import re 

def follow(name): 
    print 'following ' + name 

cmds = { 
     'Follow (?P<name>[a-z]+)': follow, 
} 

a_cmd = 'Follow foobar' 
for expr, action in cmds.iteritems(): 
    # try to match the pattern onto the given command 
    m = re.match(expr, a_cmd, re.I) 
    if m: 
     # if matched, call the corresponding action, using 
     # the named groups as keyword arguments. 
     action(**m.groupdict()) 

。疑わしい場合は、KISS。 :-)

編集:一部のプログラマーが指摘するように、これは辞書の誤用の多少です。 (ただし、画面上に簡潔に表示されます)。より洗練されたソリューションは、指定された組のリストになります。

from collections import namedtuple 
Cmd = namedtuple('Cmd', 're action') 
cmds = [ 
    Cmd(re='Follow (?P<name>[a-z]+)', action=follow), 
) 
# etc. 
+0

キーが正規表現である辞書は一種です役に立たないIMO。辞書のマッピング部分は使用しません。タプルのリストもあります。 –

関連する問題