Python中打开和读取.mat文件的问题
我在Matlab里有一些重要的数据(结构化数组),文件扩展名是.mat,我想在Python中打开这些数据。我试过几乎所有StackOverflow上的博客来访问我的数据,但还是没成功。我不仅需要在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环境
我在Windows-7上用Matlab-R2010a v7.1处理过这些文件
有没有人能帮我解决这个问题?
1 个回答
0
我怀疑你是在用一个只支持旧版7.2 .mat文件的工具,去加载新版7.3及以上的hdf5 .mat文件。因为我没有使用过h5py,所以不太清楚为什么这个模块不能正常工作。
你可以试试用这个hdf5storage
的Python模块来加载你的.mat文件:
import hdf5storage
hdf5storage.loadmat(...)
hdf5storage模块的设计灵感来自于scipy.io,使用它可以帮助我避免兼容性的问题。如果hdf5storage
也不行,那可能你的.mat文件已经损坏了。