我需要使用python将许多.npz文件转换为.mat文件。我的文件排列为datafile1.npz、datafile2.npz…等。我想将这些文件转换为datafile_1.mat、datafile_2.mat文件等。到目前为止,我写了一个代码,但得到了错误AttributeError:"str"对象没有属性"items"。。。为什么我不能理解这个错误。我希望有人能帮忙。
import numpy as np
import scipy.io
import glob
filpath=glob.glob('./datafile_*.npz')
for file in filpath:
#data = np.load('file',)
scipy.io.savemat('filepath'+'.mat', mdict=file)
print(data)
使用来自早期SO:的npz
In [491]: data = np.load('test.npz')
In [492]: list(data.keys())
Out[492]: ['arr_0', 'arr_1', 'arr_2']
In [493]: data['arr_0']
Out[493]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [494]: data['arr_1']
Out[494]:
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
In [495]: data['arr_2']
Out[495]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
CCD_ 2是类似于CCD_ 3的对象。因此,它实际上可以作为mdict
参数传递给savemat
(它也需要一个dict(:
In [496]: io.savemat('data.dat', data)
测试保存:
In [497]: io.loadmat('data.dat')
Out[497]:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Aug 2 17:16:18 2020',
'__version__': '1.0',
'__globals__': [],
'arr_0': array([[1., 1., 1.],
[1., 1., 1.]]),
'arr_1': array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]),
'arr_2': array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])}
或者我们可以制作我们自己的dict
In [498]: io.savemat('data.dat', mdict={'x':data['arr_0'], 'y':data['arr_1']})
In [499]: io.loadmat('data.dat')
Out[499]:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Aug 2 17:19:06 2020',
'__version__': '1.0',
'__globals__': [],
'x': array([[1., 1., 1.],
[1., 1., 1.]]),
'y': array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])}
关键是要理解npz
的np.load
返回dict
,我们可以从中加载实际的数组。这个dict
本身并不是数据。类似地,CCD_ 10期望阵列的CCD_。由于两者都使用dict,所以我们不必显式地加载数组。