On Mar 16, 11:05 am, "R. David Murray" <rdmur...@bitdance.com> wrote: > walle...@gmail.com wrote: > > I am working with a bit of code that works ok in Python 2.x (tested > > fine in 2.5.4 and 2.6.1) but fails in 3.0.1. > > The code opens a file for binary output to witht the objective to > > produce a .bmp graphics file. The code below illustrates the first of > > several like errors when a str object is attempted to be written to > > the binary file. From what I have seen, this was a fairly common > > technique prior to 3.0.1 being released so I am assuming the type > > checking is tighter with the new version. What is the proper way of > > doing this now, or the work around? Any help appreciated. -- Bill > > > the code: > > ----------------------------------- > > self.out=open(filename,"wb") > > self.out.write("BM") # magic number > > > This the is the error output from Python: > > ------------------------------------ > > Traceback (most recent call last): > > File "py_mandel.py", line 19, in <module> > > my_bmp=kohn_bmp("out.bmp",image_width,image_height,3) > > File "C:\Python30\py_kohn_bmp.py", line 47, in __init__ > > self.out.write("BM") # magic number > > File "C:\Python30\lib\io.py", line 1038, in write > > raise TypeError("can't write str to binary stream") > > TypeError: can't write str to binary stream > > In 3.x the 'str' type is unicode. If you want to work with binary byte > streams, you want to use the 'bytes' type. Bytes contstants are > written with a leading 'b', so the code snipped above would become > > self.out.write(b'BM') > > -- > R. David Murray http://www.bitdance.com David, Thanks for the assist. One more question, please.
self.out.write(b'BM') worked beautifully. Now I also have a similar issue, for instance: self.out.write("%c" % y) is also giving me the same error as the other statement did. I tried self.out.write(bytes("%c" %y),encoding=utf-8) in an attempt to convert to bytes, which it did, but not binary. How do I affect self.out.write("%c" % y) to write out as a binary byte steam? I also tried self.out.write(b"%c" % y), but b was an illegal operator in when used that way. It is also supposed to be data being written to the .bmp file. --Bill -- http://mail.python.org/mailman/listinfo/python-list