代码之家  ›  专栏  ›  技术社区  ›  Monica Olvera

访问几个matlab文件中的数据

  •  0
  • Monica Olvera  · 技术社区  · 8 年前

    我目前正在尝试从几个MATLab文件中获取数据。我正在从保存了所有数据的目录中读取数据。我可以单独读取Matlab文件中的数据(例如增益)。我想添加一个for循环来读取所有文件(不同的数据但格式相同)的相同“增益”,但每次我尝试编写for循环时,都会出现以下错误:类型错误:列表索引必须是整数或切片,而不是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 回复  |  直到 8 年前
        1
  •  0
  •   verbatross    8 年前

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

    (1) 您的代码正在初始化 results Gain 到长度为1的列表。相反(根据您试图执行的操作),您应该将它们初始化为长度 lenght (原文如此*)列表,即。 results = [None] * lenght Gain = [None] * lenght .

    (2) Files 是一个dict数组。在每个循环迭代中, files (原文如此**)成为这些格言之一。如果你想要的话 成为 文件夹 列表,那么您的循环应该是 for files in range(0, lenght): .

    或者,如果你愿意 后果 获得 作为dicts,您可以将其初始化为 results = {} 类似地 获得 ,然后在每次迭代中,您可以设置其值,如 results(<filename>) = ... (其中 <filename> 是当前文件名。

    另外,如果你想保持表单的循环 for files in Files: ,这很好,但请记住 文件夹 实际上是 而不是索引到 文件夹 .

    *从风格的角度来看,你应该纠正 长度 length .

    **同样从样式的角度来看,您可能不应该命名列表索引 文件夹 ; 也许是这样 f . 但这更主观。

    推荐文章