Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Python

Reading a tab delimited text file.

 

 

Python python RSS feed   Index | Next | Previous | View Threaded


sedelblut at gmail

Feb 23, 2009, 1:45 PM

Post #1 of 6 (10823 views)
Permalink
Reading a tab delimited text file.

Hi,

I would like to read a text file of numbers produced by a data
acquisition system into three vectors of doubles. The contents of the
file are:

+0.0000000e+0 +2.7645134e+1 +2.7745625e+1

+0.4100041e-1 +2.7637787e+1 +2.7731047e+1

+0.0820008e+0 +2.7645134e+1 +2.7750483e+1
...

or

+0.0000000e+0\t+2.7645134e+1\t+2.7745625e+1\r\n
...

I would like to read the first column into time_vec, second into
ch1_vec and so on.

(I have never programmed in python and am having trouble finding a way
to do this).

Thanks
--
http://mail.python.org/mailman/listinfo/python-list


python.list at tim

Feb 23, 2009, 2:06 PM

Post #2 of 6 (10759 views)
Permalink
Re: Reading a tab delimited text file. [In reply to]

> I would like to read a text file of numbers produced by a data
> acquisition system into three vectors of doubles. The contents of the
> file are:
>
> +0.0000000e+0 +2.7645134e+1 +2.7745625e+1
> +0.4100041e-1 +2.7637787e+1 +2.7731047e+1
> +0.0820008e+0 +2.7645134e+1 +2.7750483e+1
> ...
>
> or
>
> +0.0000000e+0\t+2.7645134e+1\t+2.7745625e+1\r\n
> ...
>
> I would like to read the first column into time_vec, second into
> ch1_vec and so on.
>
> (I have never programmed in python and am having trouble finding a way
> to do this).

Well, a very terse way of doing it would be something like:

time_vec, ch1_vec, and_so_on = zip(*(
map(float, line.split())
for line in file('in.txt')))

If my junior developer authored that, I'm not sure whether I'd
laud her or fire her. :)

If this isn't homework, there are some less terse versions which
are a bit easier on the eyes and less like some love-child
between Perl and Python.

-tkc



--
http://mail.python.org/mailman/listinfo/python-list


sedelblut at gmail

Feb 23, 2009, 2:17 PM

Post #3 of 6 (10758 views)
Permalink
Re: Reading a tab delimited text file. [In reply to]

On Feb 23, 4:06 pm, Tim Chase <python.l...@tim.thechases.com> wrote:
> > I would like to read a text file of numbers produced by a data
> > acquisition system into three vectors of doubles. The contents of the
> > file are:
>
> > +0.0000000e+0      +2.7645134e+1   +2.7745625e+1
> > +0.4100041e-1      +2.7637787e+1   +2.7731047e+1
> > +0.0820008e+0      +2.7645134e+1   +2.7750483e+1
> > ...
>
> > or
>
> > +0.0000000e+0\t+2.7645134e+1\t+2.7745625e+1\r\n
> > ...
>
> > I would like to read the first column into time_vec, second into
> > ch1_vec and so on.
>
> > (I have never programmed in python and am having trouble finding a way
> > to do this).
>
> Well, a very terse way of doing it would be something like:
>
>    time_vec, ch1_vec, and_so_on = zip(*(
>      map(float, line.split())
>      for line in file('in.txt')))
>
> If my junior developer authored that, I'm not sure whether I'd
> laud her or fire her. :)
>
> If this isn't homework, there are some less terse versions which
> are a bit easier on the eyes and less like some love-child
> between Perl and Python.
>
> -tkc

haha, no this isn't homework. I'm a mechanical engineering student
working on a research project and this program is for my personal use
to analyze the data.
--
http://mail.python.org/mailman/listinfo/python-list


mwilson at the-wire

Feb 23, 2009, 2:22 PM

Post #4 of 6 (10755 views)
Permalink
Re: Reading a tab delimited text file. [In reply to]

Stephen wrote:

> Hi,
>
> I would like to read a text file of numbers produced by a data
> acquisition system into three vectors of doubles. The contents of the
> file are:
>
> +0.0000000e+0 +2.7645134e+1 +2.7745625e+1
>
> +0.4100041e-1 +2.7637787e+1 +2.7731047e+1
>
> +0.0820008e+0 +2.7645134e+1 +2.7750483e+1
> ...
>
> or
>
> +0.0000000e+0\t+2.7645134e+1\t+2.7745625e+1\r\n
> ...
>
> I would like to read the first column into time_vec, second into
> ch1_vec and so on.
>
> (I have never programmed in python and am having trouble finding a way
> to do this).

A simple starting point, without error handling, etc., could be:

a_list = []
b_list = []
c_list = []
for line in open ('my_numbers.txt', 'rt'):
a, b, c = [float (x) for x in line.split()]
a_list.append (a)
b_list.append (b)
c_list.append (c)

Assuming every line has three tab-separated numbers, the text versions of
the numbers are all convertable to float, the text file that's opened will
eventually be closed (whether by garbage collection or program
termination.)

This code does illustrate the string's split method, list comprehension,
sequence unpacking, and the fact that each of a_list, b_list, c_list *MUST*
be initialized with a distinct empty list object.

Mel.


--
http://mail.python.org/mailman/listinfo/python-list


python.list at tim

Feb 23, 2009, 2:45 PM

Post #5 of 6 (10757 views)
Permalink
Re: Reading a tab delimited text file. [In reply to]

>> time_vec, ch1_vec, and_so_on = zip(*(
>> map(float, line.split())
>> for line in file('in.txt')))
>>
>> If this isn't homework, there are some less terse versions which
>> are a bit easier on the eyes and less like some love-child
>> between Perl and Python.
>
> haha, no this isn't homework. I'm a mechanical engineering student
> working on a research project and this program is for my personal use
> to analyze the data.

The "zip-star map-float" variant is a pretty unreadable way to go.

The more readable versions look something like

data = [map(float, line.split()) for line in file('in.txt')]
time_vec = [bit[0] for bit in data]
ch1_vec = [bit[1] for bit in data]
and_so_on = [bit[2] for bit in data]

or even

time_vec = []
ch1_vec = []
and_so_on = []
for line in file('in.txt'):
a,b,c = map(float, line.split())
time_vec.append(a)
ch1_vec.append(b)
and_so_on.append(c)

which could also be written as

for line in file('in.txt'):
line = line.split()
time_vec.append(float(line[0]))
ch1_vec.append(float(line[1]))
and_so_on.append(float(line[2]))

-tkc




--
http://mail.python.org/mailman/listinfo/python-list


harijay at gmail

Feb 23, 2009, 3:37 PM

Post #6 of 6 (10761 views)
Permalink
Re: Reading a tab delimited text file. [In reply to]

You could also use the csv module

import csv
myfileobj = open("myfiletab.txt","read")
csv_read = csv.reader(myfileobj,dialect=csv.excel_tab)
myval1 = []
myval2 = []
myval3 = []
for line in csv_read:
# filter header and stuff using some criterion
if len(line) = 3:
myval1.append(line[0])
myval2.append(line[1])
myval3.append(line[2])


etc etc . The csv module defines a dialect excel_tab. Each line is
then parsed into an array . You can insert that array into another
array and have an array line mydata = [ [line1],[line2] ...]

Hopw this helps
harijay

On Feb 23, 5:45 pm, Tim Chase <python.l...@tim.thechases.com> wrote:
> >>    time_vec, ch1_vec, and_so_on = zip(*(
> >>      map(float, line.split())
> >>      for line in file('in.txt')))
>
> >> If this isn't homework, there are some less terse versions which
> >> are a bit easier on the eyes and less like some love-child
> >> between Perl and Python.
>
> > haha, no this isn't homework. I'm a mechanical engineering student
> > working on a research project and this program is for my personal use
> > to analyze the data.
>
> The "zip-star map-float" variant is a pretty unreadable way to go.
>
> The more readable versions look something like
>
>    data = [map(float, line.split()) for line in file('in.txt')]
>    time_vec = [bit[0] for bit in data]
>    ch1_vec = [bit[1] for bit in data]
>    and_so_on = [bit[2] for bit in data]
>
> or even
>
>    time_vec = []
>    ch1_vec = []
>    and_so_on = []
>    for line in file('in.txt'):
>      a,b,c = map(float, line.split())
>      time_vec.append(a)
>      ch1_vec.append(b)
>      and_so_on.append(c)
>
> which could also be written as
>
>    for line in file('in.txt'):
>      line = line.split()
>      time_vec.append(float(line[0]))
>      ch1_vec.append(float(line[1]))
>      and_so_on.append(float(line[2]))
>
> -tkc

Another way would be to use the csv module .

import csv
f = file.open("mytabfile.txt"
--
http://mail.python.org/mailman/listinfo/python-list

Python python RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.