我目前正在尝试从几个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)
答案 0 :(得分:0)
导致此错误的代码有两个独立的问题:
(1)您的代码正在将results
和Gain
初始化为length-1列表。相反(根据您尝试做的事情),您应该将它们初始化为lenght
(sic *)列表,即results = [None] * lenght
和Gain = [None] * lenght
。
(2)Files
是一系列dicts。在每次循环迭代中,files
(sic **)成为其中一个。如果您希望files
成为Files
列表的索引,那么您的循环应为for files in range(0, lenght):
。
或者,如果您希望results
和Gain
为dicts,则可以将它们初始化为results = {}
,对Gain
进行初始化,然后在每次迭代中都可以设置它们的值如results(<filename>) = ...
(其中<filename>
是当前文件名。
另外,如果你想保留for files in Files:
形式的循环,那很好,但请记住files
实际上是Files
的元素而不是Files
的索引。
*从样式角度来看,您应该更正lenght
到length
的拼写。
**同样从样式的角度来看,您可能不应该将列表索引命名为files
;也许类似于f
。但这更主观。