help: output arrays into file as column

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

    help: output arrays into file as column

    Hi,

    I am trying to write several arrays into one file, with one arrays in
    one column. Each array (column) is seperated by space.
    ie. a=[1,2,3, 4] b=[5,6,7,8] c=[9,10,11,12]
    1 5 9
    2 6 10
    3 7 11
    4 8 12

    Now I use the function file.writelines (a), file.writelines (b),
    file.writelines (c). And the output is a sequence of strings without
    newlines between a, b ,c . Also each array stays in row other than
    column.

    I am a new comer to python.Any idea about this is appreciated!

    Bei

  • Simon Forman

    #2
    Re: help: output arrays into file as column

    bei wrote:
    Hi,
    >
    I am trying to write several arrays into one file, with one arrays in
    one column. Each array (column) is seperated by space.
    ie. a=[1,2,3, 4] b=[5,6,7,8] c=[9,10,11,12]
    1 5 9
    2 6 10
    3 7 11
    4 8 12
    >
    Now I use the function file.writelines (a), file.writelines (b),
    file.writelines (c). And the output is a sequence of strings without
    newlines between a, b ,c . Also each array stays in row other than
    column.
    >
    I am a new comer to python.Any idea about this is appreciated!
    >
    Bei
    Hi Bei,

    file.writelines () works with lists of strings, not lists of numbers, so
    I'm going to assume that a, b, and c are already lists of strings..

    You can use the zip() function to change the lists in the way you want
    to:

    |>a=['1','2','3','4']; b=['5','6','7','8']; c=['9','10','11',' 12']
    |>zip(a, b, c)
    [('1', '5', '9'), ('2', '6', '10'), ('3', '7', '11'), ('4', '8', '12')]

    now that you have the data for each line, you can combine them with the
    string join() method:

    |>data = zip(a, b, c)
    |>for datum in data:
    .... print ' '.join(datum)
    ....
    1 5 9
    2 6 10
    3 7 11
    4 8 12

    You can print to an open file object, so the above loop will do what
    you need:

    |>f = open('output.tx t', 'w')
    |>for datum in data:
    .... print >f, ' '.join(datum)
    ....
    |>f.close()
    |>print open('output.tx t').read()
    1 5 9
    2 6 10
    3 7 11
    4 8 12


    I hope that helps!

    Peace,
    ~Simon

    Comment

    • bei

      #3
      Re: help: output arrays into file as column

      Hi,Simon,

      Thanks for your reply.It's very helpful :)
      But I am sorry for my given example.Actuall y, my data in the arrays are
      all float point datas.And I use integer in the example.The code is like
      this.
      ("x,v,...,h" are floating point number arrays)

      pos=str(x)
      vel=str(v)
      ene=str(u)
      den=str(rho)
      pre=str(P)
      hms=str(h)
      datas=zip(pos,v el,ene,den,pre, hms)
      filename="data. dat"
      file=open(filen ame,"w")
      for datum in datas:
      print >>file, ' '.join(datum)
      file.close()


      However, the result seperate each point in floating number , but not
      regard them as a whole. It's like this :


      [ [ [ [ [ [
      - 0 1 1 1 0
      0 . . . . .
      .. 0 4 0 0 0
      5 , 9 , , 0
      9 9 3
      9 0 9 1 1 7
      9 . 9 . . 6
      9 0 9 0 0 8
      9 , 9 , , 7
      9 9 5
      9 0 9 1 1 ,
      9 . 9 . .
      9 0 9 0 0 0
      9 , 9 , , .
      9 9 0
      9 0 9 1 1 0
      9 . 9 . . 3
      9 0 8 0 0 7
      9 , , , , 6
      8 8
      , 0 1 1 1 7
      . . . . 5
      - 0 4 0 0 ,
      0 , 9 , ,
      .. 9 0
      5 0 9 1 1 .
      9 . 9 . . 0
      6 0 9 0 0 0
      9 , 9 , , 3
      9 9 7
      2 0 9 1 1 6
      4 . 9 . . 8
      8 0 9 0 0 7
      1 , 9 , , 5
      2 9 ,
      0 0 9 1 1
      3 . 9 . . 0
      0 0 8 0 0 .
      0 , , , , 0
      7 0
      5 0 1 1 1 3
      2 . . . . 7
      , 0 4 0 0 6
      , 9 , , 8
      - 9 7
      0 0 9 1 1 5
      .. . 9 . . ,
      5 0 9 0 0
      9 , 9 , , 0
      3 9 .
      9 0 9 1 1 0
      8 . 9 . . 0
      4 0 9 0 0 3
      9 , 9 , , 7
      6 9 6
      2 0 9 1 1 8
      4 . 9 . . 7
      0 0 8 0 0 5
      6 , , , , ,
      0
      1 0 1 1 1 0
      5 . . . . .
      0 0 4 0 0 0
      6 , 9 , , 0
      , 9 3
      0 9 1 1 7
      - . 9 . . 6
      0 0 9 0 0 8
      .. , 9 , , 7
      5 9 5
      9 0 9 1 1 ,
      0 . 9 . .
      9 0 9 0 0 0
      7 , 9 , , .
      7 9 0
      4 0 9 1 1 0
      4 . 9 . . 3
      3 0 8 0 0 7
      6 , , , , 6
      0 8
      9 0 1 1 1 7
      0 . . . . 5
      2 0 4 0 0 ,
      2 , 9 , ,
      4 9 0
      9 0 9 1 1 .
      , . 9 . . 0
      0 9 0 0 0
      ......

      Do you have a way to work this out? Thank you very much, And sorry
      again for my incorrect example.

      Bei




      Simon Forman wrote:
      bei wrote:
      Hi,

      I am trying to write several arrays into one file, with one arrays in
      one column. Each array (column) is seperated by space.
      ie. a=[1,2,3, 4] b=[5,6,7,8] c=[9,10,11,12]
      1 5 9
      2 6 10
      3 7 11
      4 8 12

      Now I use the function file.writelines (a), file.writelines (b),
      file.writelines (c). And the output is a sequence of strings without
      newlines between a, b ,c . Also each array stays in row other than
      column.

      I am a new comer to python.Any idea about this is appreciated!

      Bei
      >
      Hi Bei,
      >
      file.writelines () works with lists of strings, not lists of numbers, so
      I'm going to assume that a, b, and c are already lists of strings..
      >
      You can use the zip() function to change the lists in the way you want
      to:
      >
      |>a=['1','2','3','4']; b=['5','6','7','8']; c=['9','10','11',' 12']
      |>zip(a, b, c)
      [('1', '5', '9'), ('2', '6', '10'), ('3', '7', '11'), ('4', '8', '12')]
      >
      now that you have the data for each line, you can combine them with the
      string join() method:
      >
      |>data = zip(a, b, c)
      |>for datum in data:
      ... print ' '.join(datum)
      ...
      1 5 9
      2 6 10
      3 7 11
      4 8 12
      >
      You can print to an open file object, so the above loop will do what
      you need:
      >
      |>f = open('output.tx t', 'w')
      |>for datum in data:
      ... print >f, ' '.join(datum)
      ...
      |>f.close()
      |>print open('output.tx t').read()
      1 5 9
      2 6 10
      3 7 11
      4 8 12
      >
      >
      I hope that helps!
      >
      Peace,
      ~Simon

      Comment

      • Bruno Desthuilliers

        #4
        Re: help: output arrays into file as column

        bei a écrit :
        <otPlease don't top-post</ot>
        Hi,Simon,
        >
        Thanks for your reply.It's very helpful :)
        But I am sorry for my given example.Actuall y, my data in the arrays are
        all float point datas.And I use integer in the example.The code is like
        this.
        ("x,v,...,h" are floating point number arrays)
        Arrays or lists ?
        pos=str(x)
        Why on earth are you doing this ?
        vel=str(v)
        ene=str(u)
        den=str(rho)
        pre=str(P)
        hms=str(h)
        datas=zip(pos,v el,ene,den,pre, hms)
        datas = zip(v, u, rho, P, h)
        filename="data. dat"
        file=open(filen ame,"w")
        This shadows the builtin 'file' type. Using another name may be a good idea.
        for datum in datas:
        print >>file, ' '.join(datum)
        print >file, ' '.join(map(str, datum))
        file.close()


        >
        However, the result seperate each point in floating number , but not
        regard them as a whole. It's like this :
        >
        >
        [ [ [ [ [ [
        - 0 1 1 1 0
        0 . . . . .
        . 0 4 0 0 0
        5 , 9 , , 0
        9 9 3
        (snip)

        One of the nice things with Python is the interactive shell. Let's use it:
        Python 2.4.1 (#1, Jul 23 2005, 00:37:37)
        [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on
        linux2
        Type "help", "copyright" , "credits" or "license" for more information.
        >>a = map(float, range(0,3))
        >>a
        [0.0, 1.0, 2.0]
        >>b = map(float, range(12, 15))
        >>c = map(float, range(7, 10))
        >>a, b, c
        ([0.0, 1.0, 2.0], [12.0, 13.0, 14.0], [7.0, 8.0, 9.0])
        >>str(a)
        '[0.0, 1.0, 2.0]'
        >>list(str(a) )
        ['[', '0', '.', '0', ',', ' ', '1', '.', '0', ',', ' ', '2', '.', '0', ']']
        >>zip(str(a), str(b), str(c))
        [('[', '[', '['), ('0', '1', '7'), ('.', '2', '.'), ('0', '.', '0'),
        (',', '0', ','), (' ', ',', ' '), ('1', ' ', '8'), ('.', '1', '.'),
        ('0', '3', '0'), (',', '.', ','), (' ', '0', ' '), ('2', ',', '9'),
        ('.', ' ', '.'), ('0', '1', '0'), (']', '4', ']')]
        >>zip(a, b, c)
        [(0.0, 12.0, 7.0), (1.0, 13.0, 8.0), (2.0, 14.0, 9.0)]
        >>>
        HTH

        Comment

        • bei

          #5
          Re: help: output arrays into file as column

          Perfect! It works. Thanks Bruno.
          Bruno Desthuilliers wrote:
          bei a écrit :
          <otPlease don't top-post</ot>
          >
          Hi,Simon,

          Thanks for your reply.It's very helpful :)
          But I am sorry for my given example.Actuall y, my data in the arrays are
          all float point datas.And I use integer in the example.The code is like
          this.
          ("x,v,...,h" are floating point number arrays)
          >
          Arrays or lists ?
          >
          pos=str(x)
          >
          Why on earth are you doing this ?
          >
          vel=str(v)
          ene=str(u)
          den=str(rho)
          pre=str(P)
          hms=str(h)
          datas=zip(pos,v el,ene,den,pre, hms)
          >
          datas = zip(v, u, rho, P, h)
          >
          filename="data. dat"
          file=open(filen ame,"w")
          >
          This shadows the builtin 'file' type. Using another name may be a good idea.
          >
          for datum in datas:
          print >>file, ' '.join(datum)
          print >file, ' '.join(map(str, datum))
          >
          file.close()
          >
          >
          >
          >

          However, the result seperate each point in floating number , but not
          regard them as a whole. It's like this :


          [ [ [ [ [ [
          - 0 1 1 1 0
          0 . . . . .
          . 0 4 0 0 0
          5 , 9 , , 0
          9 9 3
          >
          (snip)
          >
          One of the nice things with Python is the interactive shell. Let's use it:
          Python 2.4.1 (#1, Jul 23 2005, 00:37:37)
          [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on
          linux2
          Type "help", "copyright" , "credits" or "license" for more information.
          >>a = map(float, range(0,3))
          >>a
          [0.0, 1.0, 2.0]
          >>b = map(float, range(12, 15))
          >>c = map(float, range(7, 10))
          >>a, b, c
          ([0.0, 1.0, 2.0], [12.0, 13.0, 14.0], [7.0, 8.0, 9.0])
          >>str(a)
          '[0.0, 1.0, 2.0]'
          >>list(str(a) )
          ['[', '0', '.', '0', ',', ' ', '1', '.', '0', ',', ' ', '2', '.', '0', ']']
          >>zip(str(a), str(b), str(c))
          [('[', '[', '['), ('0', '1', '7'), ('.', '2', '.'), ('0', '.', '0'),
          (',', '0', ','), (' ', ',', ' '), ('1', ' ', '8'), ('.', '1', '.'),
          ('0', '3', '0'), (',', '.', ','), (' ', '0', ' '), ('2', ',', '9'),
          ('.', ' ', '.'), ('0', '1', '0'), (']', '4', ']')]
          >>zip(a, b, c)
          [(0.0, 12.0, 7.0), (1.0, 13.0, 8.0), (2.0, 14.0, 9.0)]
          >>>
          HTH

          Comment

          Working...