2016-07-07 32 views
0

ファイルHD.txtから多次元配列を読み込み、計算用に配列にデータを格納しようとしています。 HD.txtは次のようになります。テキストファイルから多次元配列を読み込んで多次元配列に格納する

[[[27],[0],[0],[0],[0],[0],[0]], 
[[0],[0],[0],[0],[0],[0],[0]], 
[[0],[0],[0],[0],[0],[0],[0]]] 

[[102],[0],[0],[0],[0],[0]] 

私はこれらのアレイを両方読んで2つの別々のアレイに格納したいと思います。例えば、 HD.txtの最初の配列は3次元整数配列(3X7X1配列)で、2番目の配列は2次元整数配列です。私はそれらをそれぞれ3dアレイと2dアレイとして読みたいと思います。私はPythonの専門家ではないので、以下は最初の配列を読み込む私の試みです。言うまでもなく、それは私が望むようにうまくいっていませんでした。この問題の助けがあれば大歓迎です。 おかげ

with open("HD.txt", "r") as f: 
for line in f.readlines(): 
    S = line.split(' ') 
+0

とその後の値ごとに整数型にキャストすることを忘れないでくださいあなたがHD.txtファイルのデータ作成上の任意のコントロールを持っていますか? – Xander

+0

データはVC++コードからの出力です。だから、私が望むようにフォーマットすることができます。私は1次元配列として出力し、多次元配列にデータを読み込もうとしました(PythonでI = np.empty((n、m、T)、dtype = int)として宣言した後) no luck。 –

答えて

0

line.split()を使用するときは、値のそれぞれの間にある文字を必要としています。 HD.txtは各値の間にコンマがあるので、それぞれ[]という文字を単に削除してsplit()と呼ぶことができます。以下は例です。

arrayOne = [] 
arrayTwo = [] 
next = False 

with open("HD.txt", "r") as f: 
    for line in f.readlines(): 
     if line[0] == '\n': 
      next = True 
     else:   
      line = line.replace("[", "") 
      line = line.replace("]", "") 
      line = line.replace("\n", "") 

      for i in line.split(','): 
       if next: 
        arrayOne.append(i) 
       else: 
        arrayTwo.append(i) 

行が空白の場合は、最初の文字は\nになり、あなたが二番目の配列の収集を開始できることを意味します。改行文字も必ず削除してください。

+0

私は多次元配列にコンテンツを読みたいと思いますが、forループを使用して変換しようとしましたが、次のエラーがあります。I [i] [j] [0] = arrayTwo [counter] ValueError:基数10のlong()のリテラルが無効です: ' –

+0

'arrayOne'と' arrayTwo'の代わりに 'arrayOne'を' array [0 ]と 'arrayTwo'は' array [1] 'にありますか? – duncan

+0

arrayOneは2次元配列、arrayTwoは3dです –

0

データ生成をコントロールしているので、大括弧を削除し、空白(列)と戻り値(行)で区切ったデータを単純に表示することをお勧めします。それはHD.txtのために、このコンテンツにあなたを導くでしょう:

27 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 

102 0 0 0 0 0 

は、その後、あなたのアレイを再構築するために、shlexパッケージ(https://docs.python.org/2/library/shlex.html)からsplit()関数を使用します。それはスペースから物を分離します。しかし、あなたのケースでは、後で各項目をintに変換する必要があります。私たちを導く:

import shlex 

array = [] 

with open("HD.txt", "r") as f: 
i = 0 
for line in f.readlines(): 
    array[i] = shlex.split(line) 
    i += 1 

int()