forked from enormandeau/Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfind_score.py
executable file
·124 lines (101 loc) · 3.1 KB
/
find_score.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# find_score.py
# Finding the average score for identifiers with multiple scores
__authors__ = "Eric Normandeau"
__program_name__ = "find_score"
__version_info__ = ('0', '0', '1')
__version__ = '.'.join(__version_info__)
__revision_date__ = "2010-05-18"
# Module imports
import getopt
import sys
import platform
import itertools
import math
from collections import defaultdict
# Function definitions
def mean(a_list):
"""Return the mean of a list of numbers
"""
try:
mean = float(sum(a_list)) / len(a_list)
except:
print "Could not compute mean"
sys.exit(0)
return mean
def find_score(in_file, out_file):
scores = defaultdict(list)
with open(in_file) as f:
for line in f:
try:
line_list = line.split()
name = line_list[0]
score = int(line_list[1])
scores[name].append(score)
except:
continue
output = ""
for name in sorted(scores.keys()):
score = mean(scores[name])
output += name + "\t" + str(score) + "\n"
with open(out_file, "w") as f:
f.write(output)
def help():
_plateform = platform.system()
name = __program_name__
text = """
%s(1) User Commands %s(1)
\033[1mNAME\033[0m
\t%s - Find the average score of identifiers in a list
\033[1mSYNOPSIS\033[0m
\t\033[1mpython %s.py \033[0m[\033[4mOPTION\033[0m]... [\033[4mFILE\033[0m]...
\033[1mDESCRIPTION\033[0m
\tCalculate and return the average score of different identifiers
\t%s takes a file with one identifier and one score per line,
\tin a tabulated text file, and returns a file with the average score
\tfor each unique identifier.
\033[1mOPTIONS\033[0m
\t\033[1m-h, --help\033[0m
\t\tDisplay the manual of this program
\t\033[1m-i, --input\033[0m
\t\tInput file in text format
\t\033[1m-o, --output\033[0m
\t\tOutput file in text format
\033[1mAUTHORS\033[0m
\t%s
%s %s %s %s(1)
"""%(name, name, name, name, name, __authors__, name, __version__, __revision_date__, name)
if _plateform != 'Windows' and "this is cool":
print text
else:
remove = ["\033[1m","\033[0m","\033[4m"]
for i in remove:
text = text.replace(i, "")
print text
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help",
"input=", "output="])
except getopt.GetoptError, e:
print "Input error. Use -h for help"
sys.exit(0)
output_file = "uniques_output.txt"
for option, value in opts:
if option in ('-h', '--help'):
help()
sys.exit(0)
elif option in ('-i', '--input'):
input_file = value
elif option in ('-o', '--output'):
output_file = value
try:
with open(input_file) as test:
pass
except:
print "Input input file specified or file not found."
print "Use -h for help."
sys.exit(0)
find_score(input_file, output_file)
if __name__ == "__main__":
main()