Python:如何关闭mat文件?

2024-09-30 00:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将20k mat文件中的数据读入数组。 在阅读了大约13k个文件之后,这个过程以“Killed”消息结束。 显然,问题是打开的文件太多了。 我试图找出如何在Python中显式地“关闭”mat文件,但是除了savemat之外,没有找到其他文件,这不是我在本例中需要的。在

如何在python中显式关闭mat文件?在

import scipy.io
x=[]
with open('mat_list.txt','r') as f:
    for l in f:
            l=l.replace('\n','')
            mat = scipy.io.loadmat(l)
            x.append(mat['data'])

Tags: 文件数据ioimport消息过程withscipy
2条回答

您可以将打开的文件句柄传递给scipy.io.loadmat

import scipy.io
x=[]

with open('mat_list.txt','r') as f:
    for l in f:
        l=l.replace('\n','')
        with open(l, 'r') as matfile:
            mat = scipy.io.loadmat(matfile)
        x.append(mat['data'])

离开with open()上下文将自动关闭该文件。在

你不需要。loadmat不使文件保持打开状态。如果给定一个文件名,它会将文件内容加载到内存中,然后立即关闭它。您可以使用@nils werner建议的file对象,但这样做不会带来任何好处。从source code可以看出这一点。在

很可能是因为一次有太多的数据而耗尽内存。我要尝试的第一件事是将所有数据加载到一个大numpy数组中。您知道每个文件的大小,以及文件的数量,因此可以预先分配一个大小合适的数组,并将数据写入该数组的片段。如果数组大小有问题,这也会立即告诉您。在

如果内存仍然不足,则需要另一种解决方案。一个简单的解决方案是使用dask。这允许您创建看起来和行为类似于numpy数组的东西,但它存在于文件中而不是内存中。这允许您处理太大而无法放入内存的数据集。bcolz和{}提供了相似的功能,尽管不是那么无缝。在

如果没有这些选项,h5py和{}允许您以增量方式将数据集存储到文件中,而不必一次将整个内容保存在内存中。在

总的来说,我认为这个问题是XY Problem的一个典型例子。一般来说,最好是陈述你的症状,并就这些症状寻求帮助,而不是猜测解决方案是什么,然后请人帮助你实施解决方案。在

相关问题 更多 >

    热门问题