3

私の文字列は次のようになります:

"('f', ('d', ('a', 'b')), 'g')"

それをタプルに変換したい。どのようにそれを行うことができます...私は樹状図を描く際にそれを使用します

編集:追加の説明:私のコードと出力(プリント):

print type(myString)                     # <type 'str'>
print myString                           #('f',('d',('a','b')),'g')
myString = ast.literal_eval(myString)
print type(myString)                     #<type 'tuple'>
print myString                           #('f', ('d', ('a', 'b')), 'g')

for tuple in myString:                   #f
    print tuple                          #('d', ('a', 'b'))
                                         #g
4

2 に答える 2

7

これを行うにはast.literal_eval、たとえば次のようにします。

>>> import ast
>>> s = "('f', ('d', ('a', 'b')), 'g')"
>>> ast.literal_eval(s)
('f', ('d', ('a', 'b')), 'g')

その関数のドキュメントには次のように書かれています:

式ノードまたは Python 式を含む文字列を安全に評価します。提供される文字列またはノードは、次の Python リテラル構造のみで構成されている可能性があります: 文字列、数値、タプル、リスト、辞書、ブール値、およびなし。

これは、値を自分で解析する必要なく、信頼できないソースからの Python 式を含む文字列を安全に評価するために使用できます。

于 2012-10-13T21:05:55.937 に答える
2

を使用しast.literal_evalます。

これにより、 のように提供された文字列から一部の悪意のあるスクリプトが実行されなくなりevalます。

于 2012-10-13T21:06:05.460 に答える