classify-users: determine type of Athena accounts
[user/alex/software/my-snippets.git] / sort-lines
1 #!/usr/bin/python
2 import collections
3 import csv
4 import sys
5
6 class SortFile(object):
7     def __init__(self, code, descr, ):
8         self._fd = None
9         self.code = code
10         self.descr = descr
11
12     def filename(self, ):
13         return "%s.txt" % (self.descr, )
14
15     def getFD(self, ):
16         if not self._fd:
17             self._fd = open(self.filename(), 'a')
18         return self._fd
19
20     def close(self, ):
21         if self._fd:
22             self._fd.close()
23             self._fd = None
24
25
26 def read_options(filename):
27     fd = open(filename, 'r')
28     reader = csv.DictReader(fd, dialect='excel-tab', )
29     cats = {}
30     for line in reader:
31         cats[line['code']] = SortFile(code=line['code'], descr=line['descr'])
32     return cats
33
34 def process_line(line, cats, dest):
35     print line,
36     count = 0
37     for code, dest in cats.items():
38         if count % 4 == 0: print ""
39         print "(%s) %16s\t\t" % ( code, dest.descr, ),
40         count += 1
41     print ""
42     need_choice = True
43     while need_choice:
44         choice = raw_input("Enter your choice:")
45         if choice == " ":
46             if dest:
47                 dest.getFD().write(line)
48                 need_choice = False
49         elif choice in cats:
50             dest = cats[choice]
51             dest.getFD().write(line)
52             need_choice = False
53
54 def process(infile, cats):
55     fd = open(infile, 'r')
56     dest = None
57     lineno = 0
58     for line in fd:
59         lineno += 1
60         try:
61             dest = process_line(line, cats, dest)
62         except KeyboardInterrupt:
63             print "\n\nCurrent line number:", lineno
64             raise
65
66 if __name__ == "__main__":
67     cats_file = sys.argv[1]
68     data_file = sys.argv[2]
69     cats = read_options(cats_file)
70     print cats
71     process(data_file, cats)