On Thu, Feb 19, 2009 at 5:41 AM, Bala subramanian <bala.biophys...@gmail.com> wrote: > Dear friends, > > I want to extract certain 6 different columns from a many files and write it > to 6 separate output files. > > #!/usr/bin/env python > from sys import argv > lst_files=argv[1:] > > sh=[];st=[];sta=[];buc=[];pro=[];ope=[] > > def extract(fname): > A=[];B=[];C=[];D=[];E=[];F=[] > data=open(fname).readlines() > for number, line in enumerate(data): > if " Duplex" and " Shear" in line: > number=number+3 > for x in range(0,8): > new=data[number] > A.append(new[19:26]) > B.append(new[27:34]) > C.append(new[37:42]) > D.append(new[44:54]) > E.append(new[56:63]) > F.append(new[69:75]) > number = number + 1 > sh.append(A) > st.append(B) > sta.append(C) > buc.append(D) > pro.append(E) > ope.append(F)
I think you want to use extend() rather than append() here so you end up with flat lists of values. Using append() creates lists of lists which I don't think you want. > > for x in lst_files: > extract(x) > > list=[sh,st,sta,buc,pro,ope] Don't use the names of built-ins (e.g. 'list') as variable names, it shadows the built-in name. > for value in list: > row=map(None,*value) Don't do this. You just want one column of data. The program you took this from was writing one column *per input file* which I don't think you want. > out=open(str(value) + '.txt','w') Value is a list, not a file name. I think you want something like this: # List of pairs of (value list, name) lists = [ (sh, 'sh'), (st, 'st'), ...] for values, name in lists: out = open(name + '.txt', 'w') for value in values: out.write(str(value)) out.write('\n') out.close() Kent > for num in row: > out.write('\t'.join(num)) > out.write('\n') > out.close() > > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor