0

我正在处理 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 异常?

额外细节 -

  1. 波形文件在 3MBytes 和 10MBytes 之间
  2. 我一直在尝试自定义垃圾收集器以收集每隔几次迭代,但这没有用。在阅读了一些关于 GC 的内容后,我决定最好的方法是检查是否有垃圾要收集。所以我做了。这也不起作用。

请-这里有什么想法吗?

干杯。

4

0 回答 0