2017-03-16 80 views
0

我想将我的数据馈入(n,4,5)python numpy数组。 有没有简单的解决方案?将字符串转换为多维数组

我,以便该文件的每一行看起来像一条巨蟒数组,但我格式化的数据难以阅读它作为一个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]]...] 

似乎带,评估和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)) 
+0

请显示您已经试过的东西。 – thefourtheye

回答

2

包裹在一个更对支架中的每一行,然后传递到合适的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]]] 

而且一点解释,因为要求:

  • 由于在输入文件中的每一行是一个Python列表中,列出了将[[1, 2], [3, 4]]形式[1,2],[3,4],并且,'[%s]'用于包装的线还有一对括号使其成为Python。
  • ast.literal_eval()eval()的安全形式,它只接受文字(无函数调用或其他类似的东西)。

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

+0

它的工作原理!我可以问一下'ast.literal_eval('[%s]'%l)'吗? – once

+1

@once在帖子中添加了一些解释。很高兴我能帮上忙! – AKX

+0

oic!我错过了外括号,以使eval工作! – once

-1

文本= 'A,B,C'

文本= text.split( '')

文本 [ 'A', 'B', 'C']