18
|
1 #! /usr/bin/env python
|
|
2
|
|
3 import optparse, os, sys, subprocess, tempfile, shutil
|
|
4 from optparse import OptionParser
|
|
5
|
|
6 def stop_err(msg):
|
|
7 sys.stderr.write('%s\n' % msg)
|
|
8 sys.exit()
|
|
9
|
|
10 def changeName(fileName, format, name, outputName):
|
|
11 file = open(fileName, 'r')
|
|
12 line = file.readline()
|
|
13 if format == "fasta":
|
|
14 while not line.startswith('>'):
|
|
15 line = file.readline()
|
|
16 old_name = line[1:]
|
|
17 elif format == "gff":
|
|
18 while line.startswith('#'):
|
|
19 line = file.readline()
|
|
20 old_name = (line.split('\t'))[0]
|
|
21 elif format == "sam":
|
|
22 while line.startswith('@'):
|
|
23 line = file.readline()
|
|
24 old_name = (line.split('\t'))[2]
|
|
25 file.close()
|
|
26 cmd = "sed \"s/%s/%s/g\" %s >%s " % (old_name.strip(), name.strip(), fileName, outputName)
|
|
27 proc = subprocess.Popen(cmd, shell=True)
|
|
28 proc.communicate()
|
|
29 if proc.returncode != 0:
|
|
30 raise Exception("ERROR when launching '%s'" % cmd)
|
|
31
|
|
32 def getName(fileName, format):
|
|
33 file = open(fileName, 'r')
|
|
34 line = file.readline()
|
|
35 if format == "gff":
|
|
36 while line.startswith('#'):
|
|
37 line = file.readline()
|
|
38 old_name = (line.split('\t'))[0]
|
|
39 elif format == "sam":
|
|
40 while line.startswith('@') or line.startswith('#'):
|
|
41 line = file.readline()
|
|
42 old_name = (line.split('\t'))[2]
|
|
43 file.close()
|
|
44 return old_name
|
|
45
|
|
46 def __main__():
|
|
47 #Parse Command Line
|
|
48 parser = optparse.OptionParser()
|
|
49 parser.add_option("", "--input1", dest="inputFile1", default=None, help="Choose a fasta file.")
|
|
50 parser.add_option("", "--input2", dest="inputFile2", default=None, help="Choose a gff file.")
|
|
51 parser.add_option("", "--input3", dest="inputFile3", default=None, help="Choose a sam file.")
|
|
52 parser.add_option("", "--name", dest="name", default=None, help="Change to a new name.[compulsory] if there is only one input.")
|
|
53 parser.add_option("", "--output1", dest="outputFile1", default=None, help="OutputFile1")
|
|
54 parser.add_option("", "--output2", dest="outputFile2", default=None, help="OutputFile2")
|
|
55 parser.add_option("", "--output3", dest="outputFile3", default=None, help="OutputFile3")
|
|
56 (options, args) = parser.parse_args()
|
|
57
|
|
58 #TODO:write raise Exception!!
|
|
59
|
|
60 #In case only one input
|
|
61 if options.name == None:
|
|
62 #find a default_name to unify the name for all input files
|
|
63 if options.inputFile1 != None:
|
|
64 if options.inputFile2 == None and options.inputFile3 == None:
|
|
65 raise Exception("ERROR, only one input, you should identify a new name to modify.")
|
|
66 elif options.inputFile2 != None and options.outputFile2 != None:
|
|
67 default_name = getName(options.inputFile2, 'gff')
|
|
68 changeName(options.inputFile1, 'fasta', default_name, options.outputFile1)
|
|
69 changeName(options.inputFile2, 'gff', default_name, options.outputFile2)
|
|
70 if options.inputFile3 != None and options.outputFile3 != None:
|
|
71 changeName(options.inputFile3, 'sam', default_name, options.outputFile3)
|
|
72 elif options.inputFile3 != None and options.outputFile3 != None:
|
|
73 default_name = getName(options.inputFile3, 'sam')
|
|
74 changeName(options.inputFile3, 'sam', default_name, options.outputFile3)
|
|
75 changeName(options.inputFile1, 'fasta', default_name, options.outputFile1)
|
|
76 if options.inputFile2 != None and options.outputFile2 != None:
|
|
77 changeName(options.inputFile2, 'gff', default_name, options.outputFile2)
|
|
78 else:
|
|
79 if options.inputFile1 != None and options.outputFile1 != None:
|
|
80 changeName(options.inputFile1, 'fasta', options.name, options.outputFile1)
|
|
81 if options.inputFile2 != None and options.outputFile2 != None:
|
|
82 changeName(options.inputFile2, 'gff', options.name, options.outputFile2)
|
|
83 if options.inputFile3 != None and options.outputFile3 != None:
|
|
84 changeName(options.inputFile3, 'sam', options.name, options.outputFile3)
|
|
85
|
|
86 if __name__ == '__main__':__main__()
|
|
87
|
|
88
|
|
89 #test commands:
|
|
90 #only one input:
|
|
91 #python changeName.py --input1 NC_011744.fna --name NC_test --output1 out.fna
|
|
92 #several inputs:
|
|
93 #python changeName.py --input1 NC_011744.fna --input2 NC_011744.gff --output1 out.fna --output2 out.gff
|
|
94 #python changeName.py --input1 NC_011744.fna --input2 NC_011744.gff --name NC_test --output1 out.fna --output2 out.gff
|
|
95 #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
|
|
96 #python changeName.py --input1 NC_011744.fna --input3 out.sam --output1 out.fna --output3 out.sam
|
|
97
|
|
98
|
|
99 |