访问多个 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) 您的代码正在将 results
和 Gain
初始化为长度为 1 的列表。相反(根据您尝试做的事情),您应该将它们初始化为长度 lenght
(sic*) 列表,即 results = [None] * lenght
和 Gain = [None] * lenght
。
(2) Files
是一个字典数组。在每次循环迭代中, files
(sic**) 成为这些命令之一。如果您希望 files
成为 Files
列表的索引,那么您的循环应该是 for files in range(0, lenght):
.
或者,如果你想让 results
和 Gain
成为字典,你可以将它们初始化为 results = {}
并且 Gain
也类似,然后在每次迭代中你可以将它们的值设置为 results(<filename>) = ...
(其中 <filename>
是当前文件名。
此外,如果您想保留 for files in Files:
形式的循环,那很好,但请记住 files
实际上是 Files
的一个元素,而不是一个索引到 Files
.
* 从风格的角度来看,你应该将 lenght
的拼写更正为 length
.
** 同样从风格的角度来看,您可能不应该将列表索引命名为 files
;也许像 f
。但这更主观。
我目前正在尝试从多个 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) 您的代码正在将 results
和 Gain
初始化为长度为 1 的列表。相反(根据您尝试做的事情),您应该将它们初始化为长度 lenght
(sic*) 列表,即 results = [None] * lenght
和 Gain = [None] * lenght
。
(2) Files
是一个字典数组。在每次循环迭代中, files
(sic**) 成为这些命令之一。如果您希望 files
成为 Files
列表的索引,那么您的循环应该是 for files in range(0, lenght):
.
或者,如果你想让 results
和 Gain
成为字典,你可以将它们初始化为 results = {}
并且 Gain
也类似,然后在每次迭代中你可以将它们的值设置为 results(<filename>) = ...
(其中 <filename>
是当前文件名。
此外,如果您想保留 for files in Files:
形式的循环,那很好,但请记住 files
实际上是 Files
的一个元素,而不是一个索引到 Files
.
* 从风格的角度来看,你应该将 lenght
的拼写更正为 length
.
** 同样从风格的角度来看,您可能不应该将列表索引命名为 files
;也许像 f
。但这更主观。