convert scientific integer to normal integer

L

les ander

Hi,
i have a file with lines like this:
1.7000000e+01 2.4000000e+01 1.0000000e+00 8.0000000e+00 1.5000000e+01
2.3000000e+01 5.0000000e+00 7.0000000e+00 1.4000000e+01 1.6000000e+01
4.0000000e+00 6.0000000e+00 1.3000000e+01 2.0000000e+01 2.2000000e+01
1.0000000e+01 1.2000000e+01 1.9000000e+01 2.1000000e+01 3.0000000e+00
1.1000000e+01 1.8000000e+01 2.5000000e+01 2.0000000e+00 9.0000000e+00

Notice that they are all integers.
What I want to do is write them out in a regular way, by which I mean that the
output should look like this:
17 24 1 9 15
23 5 7 14 16
etc

I tried the following but it did not work:
fp=open(argv[1])
for x in fp:
xc=[int(e) for e in x.split()]
print " ".join(xc)


any help would be much appreciated
 
W

wes weston

les said:
Hi,
i have a file with lines like this:
1.7000000e+01 2.4000000e+01 1.0000000e+00 8.0000000e+00 1.5000000e+01
2.3000000e+01 5.0000000e+00 7.0000000e+00 1.4000000e+01 1.6000000e+01
4.0000000e+00 6.0000000e+00 1.3000000e+01 2.0000000e+01 2.2000000e+01
1.0000000e+01 1.2000000e+01 1.9000000e+01 2.1000000e+01 3.0000000e+00
1.1000000e+01 1.8000000e+01 2.5000000e+01 2.0000000e+00 9.0000000e+00

Notice that they are all integers.
What I want to do is write them out in a regular way, by which I mean that the
output should look like this:
17 24 1 9 15
23 5 7 14 16
etc

I tried the following but it did not work:
fp=open(argv[1])
for x in fp:
xc=[int(e) for e in x.split()]
print " ".join(xc)


any help would be much appreciated
Les,
wes
 
R

Russell Blau

wes weston said:
les said:
Hi,
i have a file with lines like this:
1.7000000e+01 2.4000000e+01 1.0000000e+00 8.0000000e+00 1.5000000e+01
2.3000000e+01 5.0000000e+00 7.0000000e+00 1.4000000e+01 1.6000000e+01
4.0000000e+00 6.0000000e+00 1.3000000e+01 2.0000000e+01 2.2000000e+01
1.0000000e+01 1.2000000e+01 1.9000000e+01 2.1000000e+01 3.0000000e+00
1.1000000e+01 1.8000000e+01 2.5000000e+01 2.0000000e+00 9.0000000e+00

Notice that they are all integers.
What I want to do is write them out in a regular way, by which I mean that the
output should look like this:
17 24 1 9 15
23 5 7 14 16
etc

I tried the following but it did not work:
fp=open(argv[1])
for x in fp:
xc=[int(e) for e in x.split()]
print " ".join(xc)


any help would be much appreciated
Les,
x=eval('1.7000000e+01')
x 17.0
wes

Erm, yes, but there is almost always a better way than eval().

Note the following:

Traceback (most recent call last):
File "<pyshell#1>", line 1, in -toplevel-
int('1.700000e+01')
ValueError: invalid literal for int(): 1.700000e+0117

This should be enough to allow you to parse your values, assuming you are
really sure that they are always going to be integers.
 
P

Paul McGuire

les ander said:
Hi,
i have a file with lines like this:
1.7000000e+01 2.4000000e+01 1.0000000e+00 8.0000000e+00 1.5000000e+01
2.3000000e+01 5.0000000e+00 7.0000000e+00 1.4000000e+01 1.6000000e+01
4.0000000e+00 6.0000000e+00 1.3000000e+01 2.0000000e+01 2.2000000e+01
1.0000000e+01 1.2000000e+01 1.9000000e+01 2.1000000e+01 3.0000000e+00
1.1000000e+01 1.8000000e+01 2.5000000e+01 2.0000000e+00 9.0000000e+00

Notice that they are all integers.
What I want to do is write them out in a regular way, by which I mean that the
output should look like this:
17 24 1 9 15
23 5 7 14 16
etc

I tried the following but it did not work:
fp=open(argv[1])
for x in fp:
xc=[int(e) for e in x.split()]
print " ".join(xc)


any help would be much appreciated
int(e) fails because it doesn't like the decimal point. See below, using
int(float(e)).

-- Paul

---------------------------------
testdata = """
1.7000000e+01 2.4000000e+01 1.0000000e+00 8.0000000e+00
1.5000000e+01
2.3000000e+01 5.0000000e+00 7.0000000e+00 1.4000000e+01
1.6000000e+01
4.0000000e+00 6.0000000e+00 1.3000000e+01 2.0000000e+01
2.2000000e+01
1.0000000e+01 1.2000000e+01 1.9000000e+01 2.1000000e+01
3.0000000e+00
1.1000000e+01 1.8000000e+01 2.5000000e+01 2.0000000e+00
9.0000000e+00
"""

for line in testdata.split('\n'):
print [ int(float(e)) for e in line.split() ]
---------------------------------
gives:
[]
[17, 24, 1, 8, 15]
[23, 5, 7, 14, 16]
[4, 6, 13, 20, 22]
[10, 12, 19, 21, 3]
[11, 18, 25, 2, 9]
[]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top