How can I Read/Write multiple sequential Binary/Text data files

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

    #1

    How can I Read/Write multiple sequential Binary/Text data files

    Dear there,

    We have an x-ray CT system. The acquisition computer acquires x-ray
    projections and outputs multiple data files in binary format (2-byte
    unsigned integer) such as projection0.raw , projection1.raw ,
    projection2.raw ... up to projection500.r aw. Each file is
    2*1024*768-byte big.

    I would like to read those files and convert to ascii files in %5.0f/n
    format as projection0.dat a ... projection500.d ata so that our
    visualization software can undersatnd the projection images. I was
    trying to do this conversion using Python. However, I had troubles
    declaring the file names using the do-loop index. Anyone had previous
    experience?

    Thanks,
    Albert

  • Christos TZOTZIOY Georgiou

    #2
    Re: How can I Read/Write multiple sequential Binary/Text data files

    On 10 Mar 2005 09:41:05 -0800, rumours say that "Albert Tu"
    <sjtu.0992@gmai l.com> might have written:
    [color=blue]
    >Dear there,
    >
    >We have an x-ray CT system. The acquisition computer acquires x-ray
    >projections and outputs multiple data files in binary format (2-byte
    >unsigned integer) such as projection0.raw , projection1.raw ,
    >projection2.ra w ... up to projection500.r aw. Each file is
    >2*1024*768-byte big.
    >
    >I would like to read those files and convert to ascii files in %5.0f/n
    >format as projection0.dat a ... projection500.d ata so that our
    >visualizatio n software can undersatnd the projection images. I was
    >trying to do this conversion using Python. However, I had troubles
    >declaring the file names using the do-loop index. Anyone had previous
    >experience?[/color]

    Regular expressions could help, but if you *know* that these are the filenames,
    you can (untested code):

    PREFIX= "projection "
    SUFFIX_I= ".raw"
    SUFFIX_O= ".data"

    import glob, struct

    for filename in glob.glob("%s*% s" % (PREFIX, SUFFIX_I)):
    number= filename[len(PREFIX):-len(SUFFIX_I)]
    fpi= open(filename, "rb")
    fpo= open("%s%s%s" % (PREFIX, number, SUFFIX_O), "w")
    while 1:
    datum= fpi.read(2)
    if not datum: break
    fpo.write("%5d\ n" % struct.unpack(" H", datum)) # check endianness!!!
    fpi.close()
    fpo.close()
    --
    TZOTZIOY, I speak England very best.
    "Be strict when sending and tolerant when receiving." (from RFC1958)
    I really should keep that in mind when talking with people, actually...

    Comment

    • John Machin

      #3
      Re: How can I Read/Write multiple sequential Binary/Text data files

      On Thu, 10 Mar 2005 20:06:29 +0200, Christos "TZOTZIOY" Georgiou
      <tzot@sil-tec.gr> wrote:
      [color=blue]
      >On 10 Mar 2005 09:41:05 -0800, rumours say that "Albert Tu"
      ><sjtu.0992@gma il.com> might have written:
      >[color=green]
      >>Dear there,
      >>
      >>We have an x-ray CT system. The acquisition computer acquires x-ray
      >>projections and outputs multiple data files in binary format (2-byte
      >>unsigned integer) such as projection0.raw , projection1.raw ,
      >>projection2.r aw ... up to projection500.r aw. Each file is
      >>2*1024*768-byte big.
      >>
      >>I would like to read those files and convert to ascii files in %5.0f/n
      >>format as projection0.dat a ... projection500.d ata so that our
      >>visualizati on software can undersatnd the projection images. I was
      >>trying to do this conversion using Python. However, I had troubles
      >>declaring the file names using the do-loop index. Anyone had previous
      >>experience?[/color]
      >
      >Regular expressions could help, but if you *know* that these are the filenames,
      >you can (untested code):
      >
      >PREFIX= "projection "
      >SUFFIX_I= ".raw"
      >SUFFIX_O= ".data"
      >
      > import glob, struct[/color]

      import array

      DIFFERENT_ENDIA N = True/False
      [color=blue]
      >
      >for filename in glob.glob("%s*% s" % (PREFIX, SUFFIX_I)):
      > number= filename[len(PREFIX):-len(SUFFIX_I)]
      > fpi= open(filename, "rb")
      > fpo= open("%s%s%s" % (PREFIX, number, SUFFIX_O), "w")
      > while 1:
      > datum= fpi.read(2)
      > if not datum: break
      > fpo.write("%5d\ n" % struct.unpack(" H", datum)) # check endianness!!![/color]

      If the OP knows that each input file is small enough (1.5Mb each as
      stated), then the agony of file.read(2) can be avoided by reading the
      whole file in one hit. The agony of struct.unpack() on each datum can
      be avoided by using the array module. E.g. replace the whole 'while'
      loop by this:

      ary = array.array('H' , fpi.read())
      if DIFFERENT_ENDIA N:
      ary.byteswap()
      for datum in ary:
      fpo.write("%5d\ n" % datum)

      Even if the input files were too large to fit in memory, they could
      still be processed fast enough by reading a big chunk at a time.

      [color=blue]
      > fpi.close()
      > fpo.close()[/color]

      Comment

      • Bengt Richter

        #4
        Re: How can I Read/Write multiple sequential Binary/Text data files

        On 10 Mar 2005 09:41:05 -0800, "Albert Tu" <sjtu.0992@gmai l.com> wrote:
        [color=blue]
        >Dear there,
        >
        >We have an x-ray CT system. The acquisition computer acquires x-ray
        >projections and outputs multiple data files in binary format (2-byte
        >unsigned integer) such as projection0.raw , projection1.raw ,
        >projection2.ra w ... up to projection500.r aw. Each file is
        >2*1024*768-byte big.
        >
        >I would like to read those files and convert to ascii files in %5.0f/n
        >format as projection0.dat a ... projection500.d ata so that our
        >visualizatio n software can undersatnd the projection images. I was[/color]
        Is there no chance of fixing the visualization software instead? The format seems
        easy and efficient, and it seems a shame to make a redundant bloated copy
        of the same info. What next? XML tags surrounding your ascii floats?

        What platform are you on? What is the visualization software's method of
        accessing data? Only files as you describe? Are you visualizing interactively,
        or setting up batch processing?
        [color=blue]
        >trying to do this conversion using Python. However, I had troubles
        >declaring the file names using the do-loop index. Anyone had previous
        >experience?
        >[/color]
        Are you the same person who posted re this format some time ago?

        Regards,
        Bengt Richter

        Comment

        Working...