2017-03-16 83 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']