将字符串数组转换为仅数组Python

时间:2018-08-12 17:14:43

标签: python

'[[[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n ...\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]]'

我有一个像上面的字符串数组。我该如何删除所有的“”(我是说我希望它转换为仅数组类型而不是字符串数组。)

我希望数组看起来像这样:

[[[-2048, -2048,-2048, ...,  -2048, -2048, -2048], [-2048, -2048, -2048, ..., -2048, -2048, -2048]  [-2048 -2048 -2048 ... -2048 -2048 -2048]  ...  [-2048 -2048 -2048 ... -2048 -2048 -2048]  [-2048 -2048 -2048 ... -2048 -2048 -2048] [-2048 -2048 -2048 ... -2048 -2048 -2048]][[-2048 -2048 -2048 ... -2048 -2048 -2048]  [-2048 -2048 -2048 ... -2048 -2048 -2048] [-2048 -2048 -2048 ... -2048 -2048 -2048]  ...  [-2048 -2048 -2048 ... -2048 -2048 -2048] [-2048 -2048 -2048 ... -2048 -2048 -2048]]]

3 个答案:

答案 0 :(得分:1)

这可能有点矫kill过正,但是解析此内容的一种安全方法是使用例如pyparsing来定义自定义解析器:

from pyparsing import *

num_expr = Word('-' + nums, nums).setParseAction(lambda t: int(t[0]))
array_expr = nestedExpr('[', ']', num_expr)

d = '[[[-2048 -2048]\r\n [-2048 -2048]]]'
print(array_expr.parseString(d).asList()[0])
# [[[-2048, -2048], [-2048, -2048]]]

答案 1 :(得分:0)

  

警告:eval()可用于执行任意Python代码。您   永远不要将eval()与不受信任的字符串一起使用。 (请参阅   Python的eval()是否位于不受信任的字符串上?)

eval('variable='+'your string here')

该函数运行一段字符串类型的代码。您应该对此做法非常小心。如果可以避免的话,强烈建议不要这样编写代码。如果字符串不完全符合您的期望,则可能会违反安全性和稳定性要求。 Python很有趣,但我会告诉您以另一种方式解决问题。如果您提供更多信息,我们可能会帮助您。

我还要告诉您是否可以获取JSON格式的字符串,然后使用Python的本机JSON解析器;更好的做法。

修改 我刚刚注意到,即使您执行了代码,您的字符串也无法解析为Python,因为您没有上面注释框中其他用户提到的适当逗号。您将需要解析它,然后调用eval,尽管确实可行,但它更加复杂且不鼓励使用。

编辑2 可以通过调用str.replace(" ", ", ")

轻松地在每个空格之前添加逗号,然后执行上述代码。

答案 2 :(得分:0)

使用re.sub删除不必要的\r\n,并在必要时添加逗号,然后使用ast.literal_eval将清理后的字符串转换为list

>>> import ast
>>> import re
>>> s = '[[[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n ...\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]\r\n\r\n [[-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  ...\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]\r\n  [-2048 -2048 -2048 ... -2048 -2048 -2048]]]'
>>> s = s.replace(' ...', '')   # Not needed for your original string
>>> l = ast.literal_eval(re.sub(r'(\d?)(?:\r\n)*\s+', r'\1, ', s))
>>> print (l)
[[[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]], [[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]], [[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]], [[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]], [[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]], [[-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048], [-2048, -2048, -2048, -2048, -2048, -2048]]]