By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,728 Members | 1,143 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,728 IT Pros & Developers. It's quick & easy.

help: output arrays into file as column

P: n/a
bei
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

Jul 27 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
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.txt', 'w')
|>for datum in data:
.... print >f, ' '.join(datum)
....
|>f.close()
|>print open('output.txt').read()
1 5 9
2 6 10
3 7 11
4 8 12
I hope that helps!

Peace,
~Simon

Jul 27 '06 #2

P: n/a
bei
Hi,Simon,

Thanks for your reply.It's very helpful :)
But I am sorry for my given example.Actually, 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,vel,ene,den,pre,hms)
filename="data.dat"
file=open(filename,"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.txt', 'w')
|>for datum in data:
... print >f, ' '.join(datum)
...
|>f.close()
|>print open('output.txt').read()
1 5 9
2 6 10
3 7 11
4 8 12
I hope that helps!

Peace,
~Simon
Jul 27 '06 #3

P: n/a
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.Actually, 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,vel,ene,den,pre,hms)
datas = zip(v, u, rho, P, h)
filename="data.dat"
file=open(filename,"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
Jul 27 '06 #4

P: n/a
bei
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.Actually, 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,vel,ene,den,pre,hms)

datas = zip(v, u, rho, P, h)
filename="data.dat"
file=open(filename,"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
Jul 28 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.