Mercurial > repos > yufei-luo > s_mart
view SMART/bacteriaRegulatoryRegion_Detection/changeName.py @ 18:94ab73e8a190
Uploaded
author | m-zytnicki |
---|---|
date | Mon, 29 Apr 2013 03:20:15 -0400 |
parents | |
children |
line wrap: on
line source
#! /usr/bin/env python import optparse, os, sys, subprocess, tempfile, shutil from optparse import OptionParser def stop_err(msg): sys.stderr.write('%s\n' % msg) sys.exit() def changeName(fileName, format, name, outputName): file = open(fileName, 'r') line = file.readline() if format == "fasta": while not line.startswith('>'): line = file.readline() old_name = line[1:] elif format == "gff": while line.startswith('#'): line = file.readline() old_name = (line.split('\t'))[0] elif format == "sam": while line.startswith('@'): line = file.readline() old_name = (line.split('\t'))[2] file.close() cmd = "sed \"s/%s/%s/g\" %s >%s " % (old_name.strip(), name.strip(), fileName, outputName) proc = subprocess.Popen(cmd, shell=True) proc.communicate() if proc.returncode != 0: raise Exception("ERROR when launching '%s'" % cmd) def getName(fileName, format): file = open(fileName, 'r') line = file.readline() if format == "gff": while line.startswith('#'): line = file.readline() old_name = (line.split('\t'))[0] elif format == "sam": while line.startswith('@') or line.startswith('#'): line = file.readline() old_name = (line.split('\t'))[2] file.close() return old_name def __main__(): #Parse Command Line parser = optparse.OptionParser() parser.add_option("", "--input1", dest="inputFile1", default=None, help="Choose a fasta file.") parser.add_option("", "--input2", dest="inputFile2", default=None, help="Choose a gff file.") parser.add_option("", "--input3", dest="inputFile3", default=None, help="Choose a sam file.") parser.add_option("", "--name", dest="name", default=None, help="Change to a new name.[compulsory] if there is only one input.") parser.add_option("", "--output1", dest="outputFile1", default=None, help="OutputFile1") parser.add_option("", "--output2", dest="outputFile2", default=None, help="OutputFile2") parser.add_option("", "--output3", dest="outputFile3", default=None, help="OutputFile3") (options, args) = parser.parse_args() #TODO:write raise Exception!! #In case only one input if options.name == None: #find a default_name to unify the name for all input files if options.inputFile1 != None: if options.inputFile2 == None and options.inputFile3 == None: raise Exception("ERROR, only one input, you should identify a new name to modify.") elif options.inputFile2 != None and options.outputFile2 != None: default_name = getName(options.inputFile2, 'gff') changeName(options.inputFile1, 'fasta', default_name, options.outputFile1) changeName(options.inputFile2, 'gff', default_name, options.outputFile2) if options.inputFile3 != None and options.outputFile3 != None: changeName(options.inputFile3, 'sam', default_name, options.outputFile3) elif options.inputFile3 != None and options.outputFile3 != None: default_name = getName(options.inputFile3, 'sam') changeName(options.inputFile3, 'sam', default_name, options.outputFile3) changeName(options.inputFile1, 'fasta', default_name, options.outputFile1) if options.inputFile2 != None and options.outputFile2 != None: changeName(options.inputFile2, 'gff', default_name, options.outputFile2) else: if options.inputFile1 != None and options.outputFile1 != None: changeName(options.inputFile1, 'fasta', options.name, options.outputFile1) if options.inputFile2 != None and options.outputFile2 != None: changeName(options.inputFile2, 'gff', options.name, options.outputFile2) if options.inputFile3 != None and options.outputFile3 != None: changeName(options.inputFile3, 'sam', options.name, options.outputFile3) if __name__ == '__main__':__main__() #test commands: #only one input: #python changeName.py --input1 NC_011744.fna --name NC_test --output1 out.fna #several inputs: #python changeName.py --input1 NC_011744.fna --input2 NC_011744.gff --output1 out.fna --output2 out.gff #python changeName.py --input1 NC_011744.fna --input2 NC_011744.gff --name NC_test --output1 out.fna --output2 out.gff #python changeName.py --input1 NC_011744.fna --input2 NC_011744.gff --input3 NC_011744.sam --name NC_test2 --output1 out.fna --output2 out.gff --output3 out.sam #python changeName.py --input1 NC_011744.fna --input3 out.sam --output1 out.fna --output3 out.sam