将 String-array 转换为 Array Python


'[[[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn ...rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-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]]]

这可能有点矫枉过正,但解析它的一种安全方法是使用自定义解析器,例如pyparsing

from pyparsing import *
num_expr = Word('-' + nums, nums).setParseAction(lambda t: int(t[0]))
array_expr = nestedExpr('[', ']', num_expr)
d = '[[[-2048 -2048]rn [-2048 -2048]]]'
print(array_expr.parseString(d).asList()[0])
# [[[-2048, -2048], [-2048, -2048]]]

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

>>> import ast
>>> import re
>>> s = '[[[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn ...rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]rnrn [[-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  ...rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]rn  [-2048 -2048 -2048 ... -2048 -2048 -2048]]]'
>>> s = s.replace(' ...', '')   # Not needed for your original string
>>> l = ast.literal_eval(re.sub(r'(d?)(?:rn)*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]]]

警告:eval(( 可用于执行任意 Python 代码。你 切勿将 eval(( 与不受信任的字符串一起使用。(请参阅安全性 Python's eval(( on untrusted strings?(

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

该函数运行一段字符串类型的代码。你应该非常小心这种做法。如果可以避免,强烈建议不要像这样编码。如果字符串不完全符合您的预期,则可能会有很高的安全性和稳定性漏洞。作为Python所拥有的东西,这很有趣,但我会告诉你以不同的方式解决这个问题。如果您提供更多信息,我们可能会为您提供帮助。

我还会告诉你,如果你能以JSON格式获取该字符串,然后使用Python的原生JSON解析器;这将是更好的做法。

编辑我刚刚注意到,即使您执行了代码,您的字符串也无法为 Python 解析,因为您没有其他用户在上面的评论框中提到的适当逗号。您需要解析它,然后调用eval,这更加复杂和不鼓励,尽管绝对可能。

编辑 2一种在每个空格之前添加一个逗号然后执行上述代码的方法可以通过调用str.replace(" ", ", ")

最新更新