2017-03-16 34 views
0

私のデータを(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]]...] 

は、ストリップ、評価および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

ブラケットのもう一つのペアの各ラインをラップし、適切な評価関数に渡す:

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]]')です。

+0

それは動作します! 'ast.literal_eval(' [%s] '%l)'について聞いてもいいですか? – once

+1

@once投稿に説明が追加されました。お役に立てて嬉しいです! – AKX

+0

oic!私は評価をするために外側の括弧が欠けていました! – once

-1

テキスト= 'B、C'

テキスト= text.split( '')

テキスト [ 'A'、 'B'、 'C​​']

関連する問題