471,344 Members | 1,532 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,344 software developers and data experts.

stripping the first byte from a binary file

rvr
Would someone mind showing me how to strip the first byte from a
binary file? For some reason I can't figure this out from the binary
file editing examples I've read. Thanks.

~rvr

Jul 10 '07 #1
11 9577
rvr wrote:
Would someone mind showing me how to strip the first byte from a
binary file? For some reason I can't figure this out from the binary
file editing examples I've read. Thanks.
Do you mean something like this?

f = open('test.dat', 'rb')
f.read(1) # read 1st byte and ignore it
rest = f.read() # read rest

or

data = f.read()
data = data[1:] # skip 1st byte

?

--
Jeremy Sanders
http://www.jeremysanders.net/
Jul 10 '07 #2
rvr
On Jul 10, 6:37 pm, Jeremy Sanders <jeremy
+complangpyt...@jeremysanders.netwrote:
rvr wrote:
Would someone mind showing me how to strip the first byte from a
binary file? For some reason I can't figure this out from the binary
file editing examples I've read. Thanks.

Do you mean something like this?

f = open('test.dat', 'rb')
f.read(1) # read 1st byte and ignore it
rest = f.read() # read rest

or

data = f.read()
data = data[1:] # skip 1st byte
Is there a way to edit the file in place? The best I seem to be able
to do is to use your second solution to read the file into the string,
then re-open the file for writing and put the whole thing back (minus
the first byte). Thanks.

~rvr

Jul 11 '07 #3
On Wed, 11 Jul 2007 01:06:04 +0000, rvr wrote:
Is there a way to edit the file in place? The best I seem to be able to
do is to use your second solution to read the file into the string, then
re-open the file for writing and put the whole thing back (minus the
first byte). Thanks.
I don't believe that any of the popular operating systems in common use
(Windows, Linux, Mac, *BSD) have any such functionality.

For safety, you are best off copying the file (minus the first byte) to a
temporary file, then renaming the copy over the original. That way if
your process dies midway through copying the file, you don't lose data.

Renaming the file is atomic under Linux and (probably) Mac, so it is as
safe as possible. Even under Windows, which isn't atomic, it has a
smaller margin for disaster than over-writing the file in place.
--
Steven.
Jul 11 '07 #4
rvr
On Jul 11, 1:28 pm, Steven D'Aprano
<ste...@REMOVE.THIS.cybersource.com.auwrote:
On Wed, 11 Jul 2007 01:06:04 +0000, rvr wrote:
Is there a way to edit the file in place? The best I seem to be able to
do is to use your second solution to read the file into the string, then
re-open the file for writing and put the whole thing back (minus the
first byte). Thanks.

I don't believe that any of the popular operating systems in common use
(Windows, Linux, Mac, *BSD) have any such functionality.

For safety, you are best off copying the file (minus the first byte) to a
temporary file, then renaming the copy over the original. That way if
your process dies midway through copying the file, you don't lose data.

Renaming the file is atomic under Linux and (probably) Mac, so it is as
safe as possible. Even under Windows, which isn't atomic, it has a
smaller margin for disaster than over-writing the file in place.
Thanks for your response. While searching for solution, I found this:

http://mail.python.org/pipermail/pyt...er/116519.html

Quoting from it:

"""
Replace 2 bytes in place beginning at offset 100 (101st byte):

f = open('text_input', 'r+b')
f.seek(100)
f.write(chr(123) + chr(0x80))
f.seek(0,2)
f.close()
"""

Can I use the seek() and write() methods in a similar way to remove
the first byte? For whatever reason I can't seem to make it work
myself. Thanks again.

~rvr

Jul 11 '07 #5
rvr wrote:
On Jul 11, 1:28 pm, Steven D'Aprano
<ste...@REMOVE.THIS.cybersource.com.auwrote:
>On Wed, 11 Jul 2007 01:06:04 +0000, rvr wrote:
>>Is there a way to edit the file in place? The best I seem to be able to
do is to use your second solution to read the file into the string, then
re-open the file for writing and put the whole thing back (minus the
first byte). Thanks.
I don't believe that any of the popular operating systems in common use
(Windows, Linux, Mac, *BSD) have any such functionality.

For safety, you are best off copying the file (minus the first byte) to a
temporary file, then renaming the copy over the original. That way if
your process dies midway through copying the file, you don't lose data.

Renaming the file is atomic under Linux and (probably) Mac, so it is as
safe as possible. Even under Windows, which isn't atomic, it has a
smaller margin for disaster than over-writing the file in place.

Thanks for your response. While searching for solution, I found this:

http://mail.python.org/pipermail/pyt...er/116519.html

Quoting from it:

"""
Replace 2 bytes in place beginning at offset 100 (101st byte):

f = open('text_input', 'r+b')
f.seek(100)
f.write(chr(123) + chr(0x80))
f.seek(0,2)
f.close()
"""

Can I use the seek() and write() methods in a similar way to remove
the first byte? For whatever reason I can't seem to make it work
myself. Thanks again.
Funny. I just happened to read ESR's "how to ask questions the smart way" and
your posts match quite a few of the examples. :)

No, you can't. Steven's solution is what I'd go for.

Stefan
Jul 11 '07 #6
On Jul 11, 1:25 pm, Stefan Behnel <stefan.behnel-n05...@web.dewrote:
rvr wrote:
On Jul 11, 1:28 pm, Steven D'Aprano
<ste...@REMOVE.THIS.cybersource.com.auwrote:
On Wed, 11 Jul 2007 01:06:04 +0000, rvr wrote:
Is there a way to edit the file in place? The best I seem to be able to
do is to use your second solution to read the file into the string, then
re-open the file for writing and put the whole thing back (minus the
first byte). Thanks.
I don't believe that any of the popular operating systems in common use
(Windows, Linux, Mac, *BSD) have any such functionality.
For safety, you are best off copying the file (minus the first byte) to a
temporary file, then renaming the copy over the original. That way if
your process dies midway through copying the file, you don't lose data.
Renaming the file is atomic under Linux and (probably) Mac, so it is as
safe as possible. Even under Windows, which isn't atomic, it has a
smaller margin for disaster than over-writing the file in place.
Thanks for your response. While searching for solution, I found this:
http://mail.python.org/pipermail/pyt...er/116519.html
Quoting from it:
"""
Replace 2 bytes in place beginning at offset 100 (101st byte):
f = open('text_input', 'r+b')
f.seek(100)
f.write(chr(123) + chr(0x80))
f.seek(0,2)
f.close()
"""
Can I use the seek() and write() methods in a similar way to remove
the first byte? For whatever reason I can't seem to make it work
myself. Thanks again.

Funny. I just happened to read ESR's "how to ask questions the smart way" and
your posts match quite a few of the examples. :)

No, you can't. Steven's solution is what I'd go for.

Stefan
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.

TIA,

../alex
--
..w( the_mindstorm )p.

Jul 11 '07 #7
>
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.
Because seeking is not moving? Shifting data bytewise isn't something that
is supported by the underlying OS filesystems, and thus not supported. But
replacing bytes with others is. Which seek is for.

Diez
Jul 11 '07 #8
Alex Popescu wrote:
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.
Why would you expect that? It *might* perform better if there was a system
call for removing bytes from inside a file, as that could reduce the
intermediate space requirements to the size of a hard disk sector rather than
the remaining size of the file (note that the time consumption would not be
reduced significantly, if the remaining file has to be copied around to fill
the sectors). But since that is a rather rare use case that most people would
prefer being handled in a safe rather than space-optimal way, I don't see the
need for such a function.

Stefan
Jul 11 '07 #9
On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.web.dewrote:
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.

Because seeking is not moving? Shifting data bytewise isn't something that
is supported by the underlying OS filesystems, and thus not supported. But
replacing bytes with others is. Which seek is for.

Diez
As far as I know seek is just about positioning and nothing else.
So, in fact the problem boils down to os support for deleting a bytes.

bests,

../alex
--
..w( the_mindstorm )p.
Jul 11 '07 #10
Alex Popescu wrote:
On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.web.dewrote:
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.

Because seeking is not moving? Shifting data bytewise isn't something
that is supported by the underlying OS filesystems, and thus not
supported. But replacing bytes with others is. Which seek is for.

Diez

As far as I know seek is just about positioning and nothing else.
It is.
So, in fact the problem boils down to os support for deleting a bytes.
Which there isn't, as I and several others pointed out. And "replacing" is
not removing.

Diez
Jul 11 '07 #11
On Jul 11, 7:45 pm, "Diez B. Roggisch" <d...@nospam.web.dewrote:
Alex Popescu wrote:
On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.web.dewrote:
Forgive my newbie ignorance, but I am wondering why the other method
would not work? I mean it may not be very safe,
but I guess it may perform a lot better, than having to read the whole
file just to cut out the first byte.
Because seeking is not moving? Shifting data bytewise isn't something
that is supported by the underlying OS filesystems, and thus not
supported. But replacing bytes with others is. Which seek is for.
Diez
As far as I know seek is just about positioning and nothing else.

It is.
So, in fact the problem boils down to os support for deleting a bytes.

Which there isn't, as I and several others pointed out. And "replacing" is
not removing.

Diez
I do agree with your last statement (and it was my mistake to consider
replacing a possible way to remove). Just wanted to
clarify that seek is only for positioning.

bests,

../alex
--
..w( the_mindstorm )p.
Jul 11 '07 #12

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

10 posts views Thread by J. Campbell | last post: by
17 posts views Thread by Arnold | last post: by
2 posts views Thread by DBC User | last post: by
12 posts views Thread by Adam J. Schaff | last post: by
7 posts views Thread by John Dann | last post: by
2 posts views Thread by Mad Scientist Jr | last post: by
2 posts views Thread by Jack | last post: by
reply views Thread by Ronak mishra | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.