2017-11-22 14 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"을 세 가지 방법으로 세 번 작성했습니다 :-D –

답변

0

이 오류를 일으키는 코드를 가진 두 개의 분리 된 문제가 있습니다

(1) 코드는 길이 1 목록에 resultsGain 초기화됩니다. 대신 (당신이하려는 것을 바탕으로), lenght (sic *) 목록 (예 : results = [None] * lenghtGain = [None] * lenght)으로 초기화해야합니다.

(2) Files은 dicts의 배열입니다. 각 루프 반복에서 files (sic **)이 그 dicts 중 하나가됩니다. filesFiles 목록의 색인으로 사용하려면 루프가 for files in range(0, lenght):이어야합니다. 당신이 dicts로 resultsGain을 원하는 경우

또는, 당신은 results = {}으로 유사 Gain 그들을 초기화 할 수 있으며, 각각의 반복에서 당신은 <filename> 현재 파일 이름입니다 results(<filename>) = ... (같은 자신의 값을 설정할 수 있습니다.

양식 for files in Files:의 루프를 유지하려는 경우

또한, 그 files 실제로 오히려 Files의 인덱스보다 Files의 요소를 될 것 괜찮지 만 명심하십시오.

* 프랑 스타일 관점에서 lenght의 맞춤법을 length으로 수정해야합니다.

** 스타일 관점에서 보면 목록 색인의 이름을 지정하지 않아도됩니다. files; 아마도 f과 같은 것입니다. 그러나 이것은보다 주관적입니다.