49

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?

2
  • 4
    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. Commented Jan 5, 2015 at 19:59
  • 1
    Possible duplicate: stackoverflow.com/questions/14437054/…. Commented Jan 5, 2015 at 20:02

1 Answer 1

50

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?

Sign up to request clarification or add additional context in comments.

4 Comments

Was looking a long time for this 'ba' option. Thanks.
'b' option didn't work with np.savetxt on my machine. Can anyone confirm it?
@HyunjunKim My python (python-3.5, numpy-1.13.3 on Ubuntu 16.04) work well above code. If you try string, append data type (np.savetxt(f, ["AAA"], "%s"))
@user4352571 I thought 'b' option is for writing data in unreadable format by human. But the code above doesn't work without 'b' option. Sorry for my misunderstanding.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.