stripping the first byte from a binary file

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rvr

    stripping the first byte from a binary file

    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

  • Jeremy Sanders

    #2
    Re: stripping the first byte from a binary file

    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

    Comment

    • rvr

      #3
      Re: stripping the first byte from a binary file

      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

      Comment

      • Steven D'Aprano

        #4
        Re: stripping the first byte from a binary file

        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.

        Comment

        • rvr

          #5
          Re: stripping the first byte from a binary file

          On Jul 11, 1:28 pm, Steven D'Aprano
          <ste...@REMOVE. THIS.cybersourc e.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:



          Quoting from it:

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

          f = open('text_inpu t', '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

          Comment

          • Stefan Behnel

            #6
            Re: stripping the first byte from a binary file

            rvr wrote:
            On Jul 11, 1:28 pm, Steven D'Aprano
            <ste...@REMOVE. THIS.cybersourc e.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:
            >

            >
            Quoting from it:
            >
            """
            Replace 2 bytes in place beginning at offset 100 (101st byte):
            >
            f = open('text_inpu t', '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

            Comment

            • Alex Popescu

              #7
              Re: stripping the first byte from a binary file

              On Jul 11, 1:25 pm, Stefan Behnel <stefan.behne l-n05...@web.dewr ote:
              rvr wrote:
              On Jul 11, 1:28 pm, Steven D'Aprano
              <ste...@REMOVE. THIS.cybersourc e.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:
              >>
              Quoting from it:
              >
              """
              Replace 2 bytes in place beginning at offset 100 (101st byte):
              >
              f = open('text_inpu t', '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.



              Comment

              • Diez B. Roggisch

                #8
                Re: stripping the first byte from a binary file

                >
                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

                Comment

                • Stefan Behnel

                  #9
                  Re: stripping the first byte from a binary file

                  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

                  Comment

                  • Alex Popescu

                    #10
                    Re: stripping the first byte from a binary file

                    On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.we b.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.


                    Comment

                    • Diez B. Roggisch

                      #11
                      Re: stripping the first byte from a binary file

                      Alex Popescu wrote:
                      On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.we b.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

                      Comment

                      • Alex Popescu

                        #12
                        Re: stripping the first byte from a binary file

                        On Jul 11, 7:45 pm, "Diez B. Roggisch" <d...@nospam.we b.dewrote:
                        Alex Popescu wrote:
                        On Jul 11, 4:15 pm, "Diez B. Roggisch" <d...@nospam.we b.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.


                        Comment

                        Working...