我正在处理 wav 文件并使用 python 的 wave 模块检查每个文件的能级。一切都适用于几十个文件,但突然间我开始得到这个 MemoryError 异常。与此同时,我忽略了异常并继续检查,这些检查有时会因异常而失败,有时会给我答案。
检查文件的方法是这样的(请关注 MemoryError 异常,因为我的代码可以正常工作,尽管目前我无法访问它,所以我决定重写它的基础知识):
import wave,os,glob
def wavCheck(filepath):
with open(filepath,'rb') as w:
handle = wave.open(w)
data = handle.readframes()
nframes = handle.getnframes()
channels = [[] for x in handle.getchannels()]
for i in nframes:
bucket = i%2
channels[bucket].append(data[i])
for channel in channels:
# calculate which frame is silent and do something
handle.close()
del handle
del nframes
del channels
return results
if __name__ == "__main__":
while os.path.exists(someDirectoryWhichContainWaves):
for filepath in glob.glob(someDirectoryWhichContainWaves+'\*.wav')
results = wavCheck(filepath)
# Do something with results
好吧-假设读取文件正常并且一切顺利并且按预期进行,当然波形文件都正常,为什么我会得到 MemoryError 异常?
额外细节 -
- 波形文件在 3MBytes 和 10MBytes 之间
- 我一直在尝试自定义垃圾收集器以收集每隔几次迭代,但这没有用。在阅读了一些关于 GC 的内容后,我决定最好的方法是检查是否有垃圾要收集。所以我做了。这也不起作用。
请-这里有什么想法吗?
干杯。