954,546 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Need some help with reading from input file [newbie]

Hi!

I've got an assignment to read an input file and do some calculation and a graph and fancy stuff like that. The problem I am having is reading the file. I get a file that looks like this:

0.00	1.776e-12	3.756e-07	0.000e+00	0.000e+00
0.20	1.769e-12	2.377e-07	0.000e+00	0.000e+00
0.40	1.764e-12	2.145e-07	0.000e+00	0.000e+00
0.60	1.759e-12	2.177e-07	0.000e+00	0.000e+00


with the tab-whitespaces between columns, and I need to get each column into a vector so I can make calculations with them. I've been trying to do stuff like readline() to get the line, but I have no idea how to extract the numbers from the line, that is, I'm stuck at:

line = 0.00\t2.869e-12\t7.715e-08\t0.000e+00\t0.000e+00\n


Anyone got some tips?

olipals
Newbie Poster
4 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

Use regular expressions.

Or use the split method.

I'd use regexp's because you've got both \t AND \n. Though I suppose that's a lot of extra overhead (someone tell me? I'm not sure how efficient regexps are compared to say string manipulation methods), so it's probably better to just go:

lineList = line.split('\t')
lineList = lineList[:-1] + [lineList[-1].split('\n')[0]]


Or in more explicit terms:

Split the list at every tab. Now take the last element of the new-formed list, and split it at the newline '\n'. This will give you a list with two elements: a number and a newline. Take the first element of the sublist and concatenate it to the original list of numbers up to it's last element. Id est:

line = '0.00\t2.869e-12\t7.715e-08\t0.000e+00\t0.000e+00\n'
lineList = line.split('\t') 
# this gives you ['0.00', '2.869e-12', '7.715e-08', '0.000e+00', '0.000e+00\n']
temp = lineList[0]
# this gives you '0.000e+00\n'
tempList = temp.split('\n')
# this gives you ['0.000e+00', '']
tempList = [tempList[0]]
# this gives you ['0.000e+00']
lineList = lineList[:-1]
# this gives you ['0.00', '2.869e-12', '7.715e-08', '0.000e+00']
lineList += tempList
# this gives you the final result of ['0.00', '2.869e-12', '7.715e-08', '0.000e+00', '0.000e+00']
Fuse
Light Poster
46 posts since Jun 2008
Reputation Points: 27
Solved Threads: 3
 

Wow, thank you very much, saved me quite a bit of work there :)

olipals
Newbie Poster
4 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

Np. It would be wise to make sure you understand what I wrote and not just copy that code straight into your programme, though.

Fuse
Light Poster
46 posts since Jun 2008
Reputation Points: 27
Solved Threads: 3
 

Of course, else I wouldn't be learning more. My program also does a lot more than just edit that one file, so I'll have to modify that anyway :)

olipals
Newbie Poster
4 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

Fuse, very nice code ad explanation!
Python has a few string functions that make your code even easier. Simply use line.rstrip(). The default removes any trailing whitespace characters like '\n':

line = '0.00\t2.869e-12\t7.715e-08\t0.000e+00\t0.000e+00\n'
# remove any trailing whitspace characters (default)
line = line.rstrip()
line_list = line.split('\t')
print line_list  # ['0.00', '2.869e-12', '7.715e-08', '0.000e+00', '0.000e+00']
sneekula
Nearly a Posting Maven
2,427 posts since Oct 2006
Reputation Points: 961
Solved Threads: 212
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You