*Updated March 2020*

It’s easy enough to load .mat files in Python via the scipy.io.loadmat function. But what about loading .pickle files into Matlab? That’s easy enough by calling a system command to save the data in the .mat format which Matlab can load, like so:

```
function [a] = loadpickle(filename)
if ~exist(filename,'file')
error('%s is not a file',filename);
end
outname = [tempname() '.mat'];
pyscript = ['import pickle;import sys;import scipy.io;file=open("' filename '", "rb");dat=pickle.load(file);file.close();scipy.io.savemat("' outname '.dat")'];
system(['python -c "' pyscript '"']);
a = load(outname);
end
```

In newer versions of Matlab, there’s an even simpler method thanks to the direct Python support in Matlab. Assuming you’ve set up Matlab to use the right Python version, you can simply use:

```
% Filename is the name of the file.
fid = py.open(filename,'rb');
data = py.pickle.load(fid);
```

## 2 responses to “Load pickle files in Matlab”

[…] And that’s pretty much all there is to it. You can use a similar process to call Python from Matlab. See also this post about reading pickle files in Matlab. […]

When I try this I seem to be getting this error – File “/path-to-python-packages/scipy/io/matlab/mio5.py”, line 857, in put_variables

for name, var in mdict.items():

AttributeError: ‘list’ object has no attribute ‘items’

I am using scipy 0.13 – Any Idea what could be going wrong here ?