访问几个matlab文件中的数据

时间:2017-11-22 00:13:30

标签: python matlab loading

我目前正在尝试从几个MATLab文件中获取数据。我正在从保存所有数据的目录中读取。我可以单独读取Matlab文件中的数据(例如Gain)。我想添加一个for循环来读取所有文件(不同数据但相同格式)相同的“Gain”,但每次我尝试编写for循环时,它都会给我这个错误:TypeError:list indices必须是整数或切片,而不是字典

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 个答案:

答案 0 :(得分:0)

导致此错误的代码有两个独立的问题:

(1)您的代码正在将resultsGain初始化为length-1列表。相反(根据您尝试做的事情),您应该将它们初始化为lenght(sic *)列表,即results = [None] * lenghtGain = [None] * lenght

(2)Files是一系列dicts。在每次循环迭代中,files(sic **)成为其中一个。如果您希望files成为Files列表的索引,那么您的循环应为for files in range(0, lenght):

或者,如果您希望resultsGain为dicts,则可以将它们初始化为results = {},对Gain进行初始化,然后在每次迭代中都可以设置它们的值如results(<filename>) = ...(其中<filename>是当前文件名。

另外,如果你想保留for files in Files:形式的循环,那很好,但请记住files实际上是Files的元素而不是Files的索引。

*从样式角度来看,您应该更正lenghtlength的拼写。

**同样从样式的角度来看,您可能不应该将列表索引命名为files;也许类似于f。但这更主观。