リストと同じように見える文字列があります。たとえば、次のようにします。
fruits = "['apple', 'orange', 'banana']"
それをリストオブジェクトに変換する方法は何でしょうか?
>>> fruits = "['apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['apple', 'orange', 'banana']
>>> fruits[1]
'orange'
コメントで指摘されているように、ast.literal_evalは安全です。ドキュメントから:
式ノードまたはPython式を含む文字列を安全に評価します。提供される文字列またはノードは、次のPythonリテラル構造のみで構成されます:文字列、数値、タプル、リスト、dict、ブール値、およびなし。
これは、値を自分で解析することなく、信頼できないソースからのPython式を含む文字列を安全に評価するために使用できます。
への簡単な呼び出しは次のようにeval()
なります。
fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']
または、この記事で説明されているように、同じことをもう少し安全に行うことができます(つまり、意図しない副作用や悪意のあるコードインジェクションのリスクを冒すことなく)。
fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})
このソリューションには、追加のモジュールに依存しないという利点があります。
これがast.literal_evalの目的だと思います。