#!/usr/bin/python import os, string, sys, getopt, Args record_delimiter = "\n---\n" class Lowercase_seq: in_stream = None out_stream = None eo_buffer = False buffer = '' rec_dic = {} rec_num = 0 ########################################### def __init__(self): pass ########################################### ########################################### def open_streams(self, input_file, output_file): #print input_file, output_file if input_file == '': self.in_stream = sys.stdin #print "in_stream = " else: try: self.in_stream = open(input_file, 'r') #print "in_stream = %s" % (input_file) except: raise IOError if output_file == '': self.out_stream = sys.stdout #print "out_stream = " else: try: self.out_stream = open(output_file, 'w') #print "out_stream = %s" % (output_file) except: raise IOError ########################################### ########################################### def close_streams(self): if self.in_stream: self.in_stream.close() if self.out_stream: self.out_stream.close() ########################################### ########################################### def get_record(self): rec = '' eof_flag = False while not self.eo_buffer: if eof_flag: if self.buffer == '': self.eo_buffer = True break else: tmp = self.in_stream.read(1000) if not tmp: eof_flag = True self.buffer = self.buffer + tmp delim_index = self.buffer.find(record_delimiter) if delim_index >= 0: rec = self.buffer[:delim_index] self.buffer = self.buffer[delim_index + len(record_delimiter):] break return rec ########################################### ########################################### def process_record(self, rec): #print "PARSE_RECORD" #print rec #print "===" lines = rec.split("\n") self.rec_num += 1 self.rec_dic[self.rec_num] = {} for l in lines: toks = l.split(": ") if toks[0]=="SEQ": self.rec_dic[self.rec_num][toks[0]] = toks[1].lower() else: self.rec_dic[self.rec_num][toks[0]] = toks[1] #self.rec_dic[self.rec_num][toks[0]] = toks[1] #print self.rec_dic[self.rec_num] return self.rec_num ########################################### ########################################### def put_record(self, r_num): rec = self.rec_dic[r_num] for k in rec.keys(): #print "%s: %s" % (k, rec[k]) self.out_stream.write("%s: %s\n" % (k, rec[k])) #print "---" self.out_stream.write("---\n") ########################################### ########################################### def print_usage(self, opt): bp_dir = os.environ['BP_DIR'] usage_path = bp_dir + os.path.sep + "bp_usage" + os.path.sep + "lowercase_seq.wiki" os.system("print_usage -i %s %s" % (usage_path, opt)) ########################################### # main """ print "############" print len(sys.argv) print sys.argv print "############" """ lc_seq = Lowercase_seq() a = Args.Args('Usage: %(progname)s [-a value] [-b value] [-c] word [file...]') a.opt['-I'] = '' # input file a.opt['-O'] = '' # output file a.getopt('I:O:?:v') # get user supplied option values print >> sys.stderr, a.opt word = a.shift() # get the first of the remaining arguments # use a.pop() to get the last instead if not word == None: sys.stderr.write("Unknown argument %s\n" % (word)) sys.exit(1) if sys.stdin.isatty(): lc_seq.print_usage('') sys.exit(1) #for line in a: # iterate over the contents of all remaining arguments (file names) # if a.lineno == 1: # print 'starting new file:', a.infile # a.warning(line.rstrip()) #print 'Options:', a.opt #print 'Word:', word #print 'Total number of lines:', a.linesum if a.opt.has_key('-?'): lc_seq.print_usage('-?') sys.exit(1) else: try: lc_seq.open_streams(a.opt['-I'], a.opt['-O']) except: sys.stderr.write("%s\n" % ("IOError")) sys.exit(1) while True: rec = lc_seq.get_record() if rec=='': break rec_num = lc_seq.process_record(rec) lc_seq.put_record(rec_num) lc_seq.close_streams() #source = "Dmel_tRNAs_key_record_tuples.txt" #lc_seq.open_stream(source) #lc_seq.get_record() #lc_seq.put_record()