#!/usr/bin/python import collections import csv import sys class SortFile(object): def __init__(self, code, descr, ): self._fd = None self.code = code self.descr = descr def filename(self, ): return "%s.txt" % (self.descr, ) def getFD(self, ): if not self._fd: self._fd = open(self.filename(), 'a') return self._fd def close(self, ): if self._fd: self._fd.close() self._fd = None def read_options(filename): fd = open(filename, 'r') reader = csv.DictReader(fd, dialect='excel-tab', ) cats = {} for line in reader: cats[line['code']] = SortFile(code=line['code'], descr=line['descr']) return cats def process_line(line, cats, dest): print line, count = 0 for code, dest in cats.items(): if count % 4 == 0: print "" print "(%s) %16s\t\t" % ( code, dest.descr, ), count += 1 print "" need_choice = True while need_choice: choice = raw_input("Enter your choice:") if choice == " ": if dest: dest.getFD().write(line) need_choice = False elif choice in cats: dest = cats[choice] dest.getFD().write(line) need_choice = False def process(infile, cats): fd = open(infile, 'r') dest = None lineno = 0 for line in fd: lineno += 1 try: dest = process_line(line, cats, dest) except KeyboardInterrupt: print "\n\nCurrent line number:", lineno raise if __name__ == "__main__": cats_file = sys.argv[1] data_file = sys.argv[2] cats = read_options(cats_file) print cats process(data_file, cats)