Mercurial > repos > melissacline > ucsc_cancer_utilities
view mergeGenomicMatrixFiles.py @ 4:d0674221a6ae
Added a proper first line
author | melissacline |
---|---|
date | Wed, 11 Feb 2015 17:28:52 -0800 |
parents | 12a1ea920524 |
children | 1d83dbbee373 |
line wrap: on
line source
#!/usr/bin/env python import string,os,sys def header (samples, infile): fin= open(infile,'r') #header, samples newSamples = string.split(string.strip(fin.readline()),'\t')[1:] for sample in newSamples: if sample not in samples: samples[sample]= len(samples) fin.close() return def process(genes, samples, dataMatrix, infile): maxLength= len(samples) fin= open(infile,'r') #header newSamples = string.split(string.strip(fin.readline()),'\t') while 1: line = fin.readline()[:-1] if line =="": break data = string.split(line,"\t") gene = data[0] if gene not in genes: genes[gene]= len(genes) l=[] for i in range (0, maxLength): l.append("") dataMatrix.append(l) x = genes[gene] for i in range (1, len(data)): sample = newSamples[i] y = samples[sample] dataMatrix[x][y]= data[i] fin.close() return def outputMatrix(dataMatrix, samples, genes, outfile): fout = open(outfile,"w") maxLength= len(samples) sList=[] for i in range (0, maxLength): sList.append("") for sample in samples: pos =samples[sample] sList[pos] = sample fout.write("sample") for sample in sList: fout.write("\t"+sample) fout.write("\n") for gene in genes: fout.write(gene) for sample in sList: value = dataMatrix[genes[gene]][samples[sample]] fout.write("\t"+value) fout.write("\n") fout.close() return if __name__ == '__main__' : if len(sys.argv[:]) <4: print "python mergeFilesByColumn.py output inputfile(s)" print "**********memory intensive, not for very genomic data with hugo number of probes" print "this is merging data A+B=C\n" sys.exit() inFiles = sys.argv[2:] outfile = sys.argv[1] genes={} samples={} dataMatrix=[] for infile in inFiles: header (samples, infile) for infile in inFiles: process(genes, samples, dataMatrix, infile) outputMatrix(dataMatrix, samples, genes, outfile)