Vous pouvez utiliser la fonction intégrée ast.literal_eval
:
>>> import ast
>>> ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}")
{'muffin': 'lolz', 'foo': 'kitty'}
C'est plus sûr que d'utiliser eval
. Comme le disent ses propres documents :
\>>> help(ast.literal\_eval)
Help on function literal\_eval in module ast:
literal\_eval(node\_or\_string)
Safely evaluate an expression node or a string containing a Python
expression. The string or node provided may only consist of the following
Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
and None.
Par exemple :
>>> eval("shutil.rmtree('mongo')")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 208, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 206, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mongo'
>>> ast.literal_eval("shutil.rmtree('mongo')")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 68, in literal_eval
return _convert(node_or_string)
File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 67, in _convert
raise ValueError('malformed string')
ValueError: malformed string
1 votes
Si vous ne pouvez pas utiliser Python 2.6, vous pouvez utiliser une implémentation simple de safeeval telle que code.activestate.com/recipes/364469 Il s'appuie sur le compilateur Python pour vous éviter d'avoir à faire tout le travail brut vous-même.
22 votes
Note : Pour ceux qui viennent ici avec d'apparence faussement similaire JSON données, vous voulez aller lire Analyser JSON en Python à la place. JSON est pas la même chose que Python . Si vous avez
"
Si vos chaînes de caractères sont entourées de guillemets doubles, vous avez probablement des données JSON. Vous pouvez également recherchernull
,true
ofalse
La syntaxe Python utiliseNone
,True
yFalse
.