1
|
1 import sys
|
|
2
|
|
3 compldna = {'A':'T',
|
|
4 'C':'G',
|
|
5 'G':'C',
|
|
6 'T':'A',
|
|
7 'U':'A',
|
|
8 'M':'K',
|
|
9 'K':'M',
|
|
10 'W':'W',
|
|
11 'S':'S',
|
|
12 'R':'Y',
|
|
13 'Y':'R',
|
|
14 'N':'N'}
|
|
15 complrna = {'A':'U',
|
|
16 'C':'G',
|
|
17 'G':'C',
|
|
18 'T':'A',
|
|
19 'U':'A',
|
|
20 'M':'K',
|
|
21 'K':'M',
|
|
22 'W':'W',
|
|
23 'S':'S',
|
|
24 'R':'Y',
|
|
25 'Y':'R',
|
|
26 'N':'N'}
|
|
27 def complement(seq,compl):
|
|
28 complseq = [compl[base] for base in seq]
|
|
29 return complseq
|
|
30
|
|
31 def reverse_complement(seq,compl):
|
|
32 seq = list(seq)
|
|
33 seq.reverse()
|
|
34 return ''.join(complement(seq,compl))
|
|
35
|
|
36 def readFastaFile(infile,outfile,compl):
|
|
37
|
|
38 fin = open(infile)
|
|
39 out = open(outfile,'w')
|
|
40
|
|
41 currSeq=''
|
|
42 currSeqname=None
|
|
43 for line in fin:
|
|
44 if '>' in line:
|
|
45 if currSeqname !=None:
|
|
46 out.write(currSeqname+reverse_complement(currSeq,compl)+'\n')
|
|
47 currSeqname=None
|
|
48 currSeq=''
|
|
49 currSeqname=line
|
|
50 else:
|
|
51 currSeq=currSeq+line.strip().upper()
|
|
52
|
|
53 if currSeqname!=None:
|
|
54 out.write(currSeqname+reverse_complement(currSeq,compl)+'\n')
|
|
55
|
|
56 fin.close()
|
|
57 out.close()
|
|
58
|
|
59 def readrawseq(infile,outfile,compl):
|
|
60 '''
|
|
61 each line is a sequence
|
|
62 '''
|
|
63 fin = open(infile)
|
|
64 out = open(outfile,'w')
|
|
65 for line in fin:
|
|
66 out.write(reverse_complement(line.strip().upper(),compl)+'\n')
|
|
67 fin.close()
|
|
68 out.close()
|
|
69
|
|
70 def main():
|
|
71 seqfile = sys.argv[1]
|
|
72 outfile = sys.argv[2]
|
|
73 fasta = sys.argv[3]
|
|
74 rna = sys.argv[4]
|
|
75 if rna == 'rna':
|
|
76 compl = complrna
|
|
77 else:
|
|
78 compl = compldna
|
|
79 if fasta == 'fasta':
|
|
80 readFastaFile(seqfile,outfile,compl)
|
|
81 else:
|
|
82 readrawseq(seqfile,outfile,compl)
|
|
83
|
|
84 main()
|