> I am trying to read from 2 CSV files, where first 4 ([0,1,2,3]) > columns are read from 'file1' and 3 columns ([1,2,3]) from 'file2' and > write them into a 3rd file 'file3', 7 columns string. The data is > Numeric values both, +ve and -ve. > > this is how i was trying. > > ****************************************** > import sys,os, fileinput > > > file11 = raw_input('Enter PR1 File name :') > fp1 = open(file11,'r') > > file12 = raw_input('Enter PR3 File Name :') > fp2 = open(file12,'r') > > > while 1: > fp1 = fp1.readline() > for line in fp1:
This is too much: Looks like you've gathered input from example scripts, and combined them all in the above three lines. Instead of explaining what's going wrong (sorry; ask again if you really want to know), here's what you could do instead: while 1: line = fp1.readline() # read a line and move file pointer to the next line line2 = ... <etc> and probably wrap that in a try-except block to catch the EOF error when there's nothing more to read. Better is, however, for line in fp1: # iterating through a file is iterating through its separate lines. line2 = ... <etc> Even better, assuming you're Python >=2.6 (for Python 2.5, use the following at the top of your file: from __future__ import with_statement): file11 = raw_input('Enter PR1 File name :') with open(file11) as fp1: for line in fp1: line2 = ... <do stuff> The with clause, in combination with the open(file1) statement (note: mode 'r' is the default), will neatly close the file afterwards, even if you get an error in the for loop (ie, the with statement takes care of some try-except-finally clauses previously used). As for whether there are better ways of 'doing it': there are CSV Python modules out there that could help you (I've never used those), and personally I would use a combination of *nix tools like awk & paste for just this. But that's not an option on a Python mailing list ;-). Hope that helps, Evert > line2 = line.split(",") > col1 = line2[0] > col2 = line2[1] > col3 = line2[2] > col4 = line2[3] > print col1 > print col2 > FL1 = '%s,%s,%s,%s' % (col1,col2,col3,col4) > print FL1 > > while 1: > fp2 = fp2.readline() > for line1 in fp2: > line3 = line1.split(",") > col5 = line3[1] > col6 = line3[2] > col7 = line3[3] > > FL2 = '%s,%s,%s,' % (col5,col6,col7) > print FL2 > > file3=raw_input('Enter PR2 OUTPUT File Name :') > fp3 = open(file3,'w') > > print col1,col2,col3,col4 + ',' + col5,col6,col7 > > str3 = '%s,%s,%s,%s,%s,%s,%s\n' % (col1,col2,col3,col4,col5,col6,col7) > fp3.write(str3) > > ********************************************** > > I am getting the following error : > > Traceback (most recent call last): > File "mer5Pr2.py", line 16, in <module> > col2 = line2[1] > IndexError: list index out of range > > ********************************************************* > > There is data in the file at 'col2'. So what am i missing / doing wrong ? > > And is there better / optimized way of doing it? > > Thanks > > Nitin > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor