在python中打开和读取.mat文件的问题

时间:2014-08-24 08:02:37

标签: python matlab numpy mat h5py

我在Matlab中有一些重要的数据(结构化数组)和.mat扩展名我想在python中打开,我几乎每个博客都从堆栈溢出来访问我的数据但是仍然不成功我不需要只是加载数据在python中,但在制作numpy数组后处理它们。我在Windows中加载它们但无法访问子数组。

我使用了以下命令:

    import numpy as np, h5py, scipy.io
    scipy.io.loadmat('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat')

导致以下错误:

    Traceback (most recent call last):
    File "<pyshell#1>", line 1, in <module>
    scipy.io.loadmat('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat')
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 126, in loadmat
matfile_dict = MR.get_variables(variable_names)
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 394, in get_variables
hdr, next_position = self.read_var_header()
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 350, in read_var_header
hdr = self._matrix_reader.read_header()
    File "/usr/lib/python2.7/dist-packages/scipy/io/matlab/mio4.py", line 121, in read_header
    raise ValueError('O in MOPT integer should be 0, wrong format?')
    ValueError: O in MOPT integer should be 0, wrong format?

然后我使用h5py命令加载:

    f = h5py.File('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat','r+')

这导致以下错误:

    Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
    f = h5py.File('/media/sibte/DATA and SOFTWARE/DATA/recovery/GENERAL SOFTWARE/MATLAB/2_Programming Files/MATLAB Files/ASTRONOMICAL DATA and WORKING on it/NVSS.mat','r+')
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/files.py", line 207, in __init__
fid = make_fid(name, mode, userblock_size, fapl)
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/files.py", line 81, in make_fid
fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)
    File "h5f.pyx", line 71, in h5py.h5f.open (h5py/h5f.c:1806)
    IOError: unable to open file (File accessibilty: Unable to open file)

我花了几天时间加载这些数据,我还有很多其他数据以.mat格式访问,但却厌倦了这个死锁

注意:我在UBUNTU-14.04上使用IDLE-Python-2.7.6 shell

我曾在Windows-7上的Matlab-R2010a v7.1中使用过这些文件

有关此问题的任何帮助吗?

1 个答案:

答案 0 :(得分:0)

我怀疑您正在尝试使用希望查看旧样式7.2 .mat文件的阅读器加载V7.3 + hdf5 .mat文件。我没有使用过h5py所以我不确定为什么那个模块不起作用。

尝试使用hdf5storage python模块加载.mat文件:

import hdf5storage
hdf5storage.loadmat(...)

hdf5storage模块是在scipy.io之后建模的,它帮助我避免了兼容性问题。如果hdf5storage不起作用,则.mat文件可能已损坏。