2017-11-22 9 views
0

現在、いくつかのMATLabファイルからデータを取得しようとしています。私は私のすべてのデータが保存されているディレクトリから読んでいます。 Matlabファイル内のデータ(例:Gain)を個別に読み取ることができます。私はforループを追加して、すべてのファイル(異なるデータで同じフォーマット)を同じ "Gain"で読み込むようにしたいのですが、forループを書くたびにこのエラーが出ます:TypeError:リストインデックスは整数またはスライスは、のdictないいくつかのMATLABファイルのデータにアクセスする

import numpy as np 
import sys 
import scipy.io as sio 
import scipy 
import matplotlib.pyplot as plt 
import tkinter as tk 
from tkinter import * 
from tkinter import filedialog 
import os 

#directory where all data will be stored 
dataDir="C:/Users/me/Desktop/Data/" 
Files=[] #list of files 
lenght=len(Files) 
for file in os.listdir(dataDir): 
    Files.append(scipy.io.loadmat(dataDir+file)) 

#initialize arrays 
results=[lenght] 
Gain=[lenght] 


for files in Files: 
    results[files]=Files[files]['results'] 
    #Gain in side of my results key in the file. I can read it in only one file 
    Gain[files]=results[files]['PowerDomain'][0,0]['Gain'][0,0] 

    print (files) 
+1

"MATLAB"は3つの異なる方法で3回書きました.-D –

答えて

0

このエラーの原因となっているコードを持つ2つの別々の問題があります。

(1)あなたのコードは長さ1のリストにresultsGainを初期化しています。代わりに(何をしようとしているかに基づいて)、長さlenght(sic *)のリスト、つまりresults = [None] * lenghtGain = [None] * lenghtに初期化する必要があります。

(2)Filesは、dictsの配列です。各ループ反復では、files(sic **)がこれらのdictの1つになります。代わりにfilesFilesリストのインデックスにする場合は、ループはfor files in range(0, lenght):である必要があります。あなたがdictsするresultsGainをしたい場合

あるいは、あなたはresults = {}として、同様Gainのためにそれらを初期化することができ、その後、各反復で、あなたは<filename>は、現在のファイル名であるresults(<filename>) = ...(のようにその値を設定することができます。

フォームfor files in Files:のループを維持したい場合にも、それは大丈夫ですが、filesが実際にFilesFilesの要素ではなく、指標となることに注意してください。

*神父スタイルの観点から、lenghtの綴りをlengthに修正する必要があります。

**スタイルの観点からも、おそらくリストのインデックスには、filesという名前を付けるべきではありません。おそらくfのようなものでしょう。しかし、これはより主観的です。

関連する問題