访问多个 matlab 文件中的数据

Access data in several matlab files

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

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

(2) Files 是一个字典数组。在每次循环迭代中, files (sic**) 成为这些命令之一。如果您希望 files 成为 Files 列表的索引,那么您的循环应该是 for files in range(0, lenght):.

或者,如果你想让 resultsGain 成为字典,你可以将它们初始化为 results = {} 并且 Gain 也类似,然后在每次迭代中你可以将它们的值设置为 results(<filename>) = ...(其中 <filename> 是当前文件名。

此外,如果您想保留 for files in Files: 形式的循环,那很好,但请记住 files 实际上是 Files 的一个元素,而不是一个索引到 Files.

* 从风格的角度来看,你应该将 lenght 的拼写更正为 length.

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