将字符串转换为多维数组

时间:2017-03-16 12:40:33

标签: python arrays file numpy

我想将我的数据提供给(n,4,5)python numpy数组。 有什么简单的解决方案吗?

我格式化我的数据,以便文件的每一行看起来像一个python数组,但很难将其作为python数组读取,例如:

[0,0,0,1,1],[0,0,0,0,0],[0,1,1,0,0],[1,0,0,0,0] //line1
[1,0,0,1,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0] //line2
... 
欲望输出:

myarray=[[[0,0,0,1,1],[0,0,0,0,0],[0,1,1,0,0],[1,0,0,0,0]],[[1,0,0,1,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0]]...]

看起来像条带,eval和json都运行不好..请帮忙

我也尝试过:

with open('filename') as f:
    data = f.readlines()
    data = [x.strip() for x in data]
array=[]
for i in data:
    a=split(r'(?<=\]),(?=\[)',i )
    array.append(a)
data=np.array((array))

2 个答案:

答案 0 :(得分:3)

将每一行包裹在另外一对括号中,然后传递给合适的eval函数:

import ast

arr = []
with open('input.txt', 'r') as infp:
    for l in infp:
        arr.append(ast.literal_eval('[%s]' % l))  # replace with eval() if you trust your input data

print(arr)      

输出:

[[[0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 1, 1, 0, 0], [1, 0, 0, 0, 0]], [[1, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0]]]

根据要求做了一点解释:

  • 由于输入文件中的每一行都是[1,2],[3,4]形式,而Python列表列表是[[1, 2], [3, 4]],因此'[%s]'用于包含该行中的一行一对括号使其成为有效的Python。
  • ast.literal_eval()eval()的安全形式,只接受文字(没有函数调用或其他类似的东西)。

  • 总而言之,对于行[1, 2], [3, 4],有效代码为eval('[[1, 2], [3, 4]]')

答案 1 :(得分:-1)

text =&#39; a,b,c&#39;

text = text.split(&#39;,&#39;)

文本 [&#39; a&#39;,&#39; b&#39;,&#39; c&#39; ]