-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate_usernames.py
48 lines (44 loc) · 1.51 KB
/
generate_usernames.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
import sys
import collections
ID,FORENAME,MIDDLENAME,SURNAME,DEPARTMENT=range(5)
User=collections.namedtuple("User","username forename middlename surname id")
def main():
if len(sys.argv)==1 or sys.argv[1] in {"-h","-help"}:
print("usage:{0}file1[file2]".format(sys.argv[0]))
sys.exit()
usernames = set()
users={}
for filename in sys.argv[1:]:
for line in open(filename,encoding="utf-8"):
line = line.rstrip()
if line:
user=process_line(line,usernames)
users[(user.surname.lower(),user.forename.lower(),user.id)]=user
print_users(users)
def process_line(line,usernames):
fields=line.split(":")
username=generate_username(fields,usernames)
user=User(username,fields[FORENAME],fields[MIDDLENAME],fields[SURNAME],fields[ID])
return user
def generate_username(fields,usernames):
username=fields[FORENAME]
username = original_name = username[:8].lower()
count=1
while username in usernames:
username="{0}{1}".format(original_name,count)
count+=1
usernames.add(username)
return username
def print_users(users):
namewidth=32
usernamewidth=9
print("{0:<{nw}}{1:^6}{2:{uw}}".format("Name","ID","Username",nw=namewidth,uw=usernamewidth))
print("{0:-<{nw}}{0:-<6}{0:-<{uw}}".format("",nw=namewidth,uw=usernamewidth))
for key in sorted(users):
user= users[key]
initial=""
if user.middlename:
initial=""+user.middlename[0]
name = "{0.surname},{0.forename}{1}".format(user,initial)
print("{0:.<{nw}}{1.id:4}{1.username:{uw}}".format(name,user,nw=namewidth,uw=usernamewidth))
main()