0

rdb_master_mongodbwhereのような文字列rdb_が固定されてmasterおり、データベース名でありmongodbmysqlmongodbpostgresmssqlまたはのいずれかになりbdbます。に値を持つ辞書からこの文字列の値を取得する必要がありますmyDict[master][mongodb]。これを取得するには、文字列を分割してrdb_master_mongodbと の値を取得する必要がmasterありmongodbます。文字列が になることがあるため、分割は使用できませんrdb_master_test_mongodb。したがってendswith、正確なキーを取得するために使用する必要があります。ただし、endswithリストでは機能しません。

タプルから一致するタプル値を取得する必要があります。今、私はこれを次のようにします:

import re 
name = 'rdb_master_mongodb'
s = re.sub('rdb_', "", name)
VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
(a, b, c, d, e) = VALID_DB
if s.endswith(a):
   db = a
if s.endswith(b):
  db = b
if s.endswith(c):
  db = c
if s.endswith(d):
  db = d
if s.endswith(e):
  db = e
db_name = re.sub('_'+db, "", s)
print db_name+" is "+db

これを行うより良い方法はありますか?

4

3 に答える 3

1
db = name.rsplit('_', 1)[1]
if db not in VALID_DB:
    raise ValueError('Incorrect DB name: %s' % db)
于 2012-06-08T07:41:34.480 に答える
1

の形式nameが常に同じである場合は、最初にパーツに分割できます。

rdb, temp = name.split('_', 1)
master, db = temp.rsplit('_', 1)

次に、db有効かどうかを確認します。

VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
if db in VALID_DB:
   ...

次に、これら 3 つの変数を使用して、rdb, master, db必要な文字列を作成します。

于 2012-06-08T07:41:55.807 に答える
0

したがって、単語の終わりだけが重要です。私があなたをよく理解していれば、この場合は次のようにします。

>>> VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
>>> name = 'rdb_master_mongodb'
>>> db_name = [db for db in VALID_DB if name.endswith(db)][0]
>>> db_name
'mongodb'
>>> name_test = 'rdb_master_test_mongodb'
>>> db_name = [db for db in VALID_DB if name_test.endswith(db)][0]
>>> db_name
'mongodb'
于 2012-06-08T07:42:50.773 に答える