73 lines
2.1 KiB
Python
Executable File
73 lines
2.1 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
import collections
|
|
import sys
|
|
|
|
# Start 1st block
|
|
ID, FORENAME, MIDDLENAME, SURNAME, DEPARTMENT = range(5)
|
|
# End 1st block
|
|
|
|
User = collections.namedtuple("User",
|
|
"username forename middlename surname id")
|
|
# End 2d block
|
|
|
|
def main():
|
|
if len(sys.argv) == 1 or sys.argv[1] in {"-h", "--help"}:
|
|
print("usage: {0} file1 [file2 [... fileN]]".format(
|
|
sys.argv[0]))
|
|
sys.exit()
|
|
|
|
usernames = set()
|
|
users = {}
|
|
for filename in sys.argv[1:]:
|
|
with open(filename, encoding="utf8") as file:
|
|
for line in file:
|
|
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][0] + fields[MIDDLENAME][:1] +
|
|
fields[SURNAME]).replace("-", "").replace("'", ""))
|
|
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()
|