2

I am receving a string through a socket like so

"['[0,0,0]','[0,0,0]']"

I would like to convert it back to a array. I have tried using

received.split(",")

however it splits up the arrays inside the array.

How would I go about converting the string to an array?

IslaStewart
  • 311
  • 2
  • 11

1 Answers1

5
>>> import ast
>>> s = "['[0,0,0]','[0,0,0]']"
>>> s = ast.literal_eval(s)
>>> s
['[0,0,0]', '[0,0,0]']
>>> s = [ast.literal_eval(sub) for sub in s]
>>> s
[[0, 0, 0], [0, 0, 0]] 

Using literal_eval is safer than eval. From the docs:

31.2. ast — Abstract Syntax Trees¶

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.

This can be used for safely evaluating strings containing Python expressions from untrusted sources without the need to parse the values oneself.

Grijesh Chauhan
  • 57,103
  • 20
  • 141
  • 208
Rapolas K.
  • 1,669
  • 26
  • 34
  • Add documentation link: [31.2. ast — Abstract Syntax Trees¶](http://docs.python.org/2/library/ast.html) and link that suggests preference of your technique over simple `eval()` given by me: here is the link: http://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval. – Grijesh Chauhan Aug 24 '13 at 08:37