【发布时间】:2019-01-14 06:05:04
【问题描述】:
我知道使用 python 读取 .mat 文件的两种替代方法。对于 7.3 版本之前的 .mat 文件,函数 scipy.io.loadmat 可以完美运行。对于 7.3 版本的 .mat 文件,您需要使用像 h5py 这样的 HDF5 阅读器。
我的问题是;对于给定的文件,有没有办法在 python 中找到它的 .mat 版本?这样我就可以创建一个读取任何 .mat 的函数。
【问题讨论】:
我知道使用 python 读取 .mat 文件的两种替代方法。对于 7.3 版本之前的 .mat 文件,函数 scipy.io.loadmat 可以完美运行。对于 7.3 版本的 .mat 文件,您需要使用像 h5py 这样的 HDF5 阅读器。
我的问题是;对于给定的文件,有没有办法在 python 中找到它的 .mat 版本?这样我就可以创建一个读取任何 .mat 的函数。
【问题讨论】:
EAFP(请求原谅比请求许可更容易)
scipy.loadmat 会检查版本并在不支持时引发错误。
try:
import scipy.io as sio
test = sio.loadmat('test.mat')
except NotImplementedError:
import h5py
with h5py.File('test.mat', 'r') as hf:
data = hf['name-of-dataset'][:]
except:
ValueError('could not read at all...')
如果你想自己做检查,你可以在scipy.io.matlab.miobase.py中使用get_matfile_version()。用法同第一个链接。
【讨论】:
if 条件来真正检查版本号。如果get_matfile_version() 中的版本是2,使用h5py 可能会更清楚。谁知道还有什么可能会引发NotImplementedError :) 这仅取决于您是否要使用get_matfile_version() 并偷偷预览文件。