48
votes

I am trying to append data to a file using numpy's savetxt function. Below is the minimum working example

#!/usr/bin/env python3
import numpy as np
f=open('asd.dat','a')
for iind in range(4):
    a=np.random.rand(10,10)
    np.savetxt(f,a)
f.close()

The error that I got is something about the type of the error

File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 1073, in savetxt fh.write(asbytes(format % tuple(row) + newline)) TypeError: must be str, not bytes

This error doesn't occur in python2 so I am wondering what the issue could be. Can anyone help me out?

1
You have to open your file in binary instead of text mode: f=open('asd.dat','ba'). Also consider using the with statement to ensure that your file handle gets properly closed in case an error occurs. - cel
@cel That solved the problem, thanks - Meenakshi

1 Answers

48
votes

You should open file by binary mode.

#!/usr/bin/env python3
import numpy as np        
f=open('asd.dat','ab')
for iind in range(4):
    a=np.random.rand(10,10)
    np.savetxt(f,a)
f.close()

reference: python - How to write a numpy array to a csv file? - Stack Overflow How to write a numpy array to a csv file?