#! /usr/bin/env python3 import sys ################################################################################ def printUsageAndExit() : print("USAGE : %s infos.tsv baseFile.tsv keyColumnIndex defaultSymbol"%sys.argv[0], file=sys.stderr) exit(1) ################################################################################ ################################################################################ def readInfos(filename) : infos = {} usualColNumber = -1 for line in open(filename, 'r') : if len(line) == 0 or '\t' not in line or line[0] == '#' : continue splited = line.strip().split('\t') if usualColNumber == -1 : usualColNumber = len(splited) if len(splited) != usualColNumber : print("WARNING : expected %d columns for line '%s'"%(usualColNumber, line.strip()), file=sys.stderr) continue if splited[0] in infos : print("ERROR : redefinition of line '%s'"%line.strip(), file=sys.stderr) exit(1) infos[splited[0]] = splited[1:] return infos ################################################################################ ################################################################################ def pasteInfosToFile(filename, infos, colIndex, defaultSymbol) : nbColsToAdd = 0 for key in infos : nbColsToAdd = len(infos[key]) break for line in open(filename, 'r') : if len(line) == 0 or '\t' not in line or line[0] == '#' : print(line.strip()) continue splited = line.strip().split('\t') if colIndex not in range(0,len(splited)) : print("ERROR : column index '%d' not found in line '%s'"%(colIndex, line.strip()), file=sys.stderr) exit(1) if splited[colIndex] in infos : for col in infos[splited[colIndex]] : splited.append(col) else : for i in range(nbColsToAdd) : splited.append(defaultSymbol) print("\t".join(splited)) ################################################################################ ################################################################################ if __name__ == "__main__" : if len(sys.argv) != 5 : printUsageAndExit() infoFile = sys.argv[1] baseFile = sys.argv[2] colIndex = int(sys.argv[3]) defaultSymbol = sys.argv[4] infos = readInfos(infoFile) pasteInfosToFile(baseFile, infos, colIndex, defaultSymbol) ################################################################################