> 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