> What platform? What version of Python? Have you opened the
> file in binary mode  i.e. open('thefile', 'rb') ?? Show us the relevant
> parts of your code, plus what  caused you to conclude that read()
> changed data on the fly in an undocumented fashion.

Yes, I've been reading and writing everything in binary mode. I'm using
version 2.4 on a Windows XP machine.

Here is the code that I have been using to split up the original file:

f = open('evil2.gfx','rb')
i1 = open('img1.jpg','wb')
i2 = open('img2.png','wb')
i3 = open('img3.gif','wb')
i4 = open('img4.png','wb')
i5 = open('img5.jpg','wb')


for i in range(0,67575,5):
    i1.write(f.read(1))
    i2.write(f.read(1))
    i3.write(f.read(1))
    i4.write(f.read(1))
    i5.write(f.read(1))

f.close()
i1.close()
i2.close()
i3.close()
i4.close()
i5.close()

I first noticed the problem by looking at the original file and
img1.jpg side by side with a hex editor. Since img1 contains every 5th
byte from the original file, I was able to find many places where \x00
should have been copied to img1.jpg, but instead a \x20 was copied.
What caused me to suspect the read method was the following:

>>> f = open('evil2.gfx','rb')
>>> s = f.read()
print repr(s[19:22])
'\xe0 \r'

Now, I have checked many times with a hex editor that the 21st byte of
the file is \x00, yet above you can see that it is reading it as a
space. I've repeated this with several different nulls in the original
file and the result is always the same.

As I said in my original post, when I try simply writing a null to my
own file and reading it (as someone mentioned earlier) everything is
fine. It seems to be only this file which is causing issue.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to