main > main: cleanup
This commit is contained in:
parent
e99927fa37
commit
5a192f14f3
188
contacts/main.py
188
contacts/main.py
@ -1,188 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# IMPORTS
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
import os;
|
||||
import sys;
|
||||
import re;
|
||||
import numpy as np;
|
||||
from numpy import int32;
|
||||
import numpy.linalg as npLA;
|
||||
import pandas as pd;
|
||||
from typing import Dict;
|
||||
|
||||
# erzwinge wd:
|
||||
SOURCEDIRECTORY = os.path.dirname(os.path.realpath(__file__));
|
||||
os.chdir(SOURCEDIRECTORY);
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# GLOBAL VARIABLES
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
INPUT_CONTACTS = 'kontakte.csv';
|
||||
OUTPUT_GROUPS = 'teilnehmer.csv';
|
||||
OUTPUT_EMAILS = 'EMAILS';
|
||||
AUFGABEN: Dict[int, str] = dict();
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# HAUPTVORGANG
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
def main():
|
||||
contacts = get_contacts();
|
||||
write_emails(contacts);
|
||||
contacts = assign_groups(contacts);
|
||||
contacts = assign_exercises(contacts);
|
||||
contacts = censor_data(contacts);
|
||||
write_groups(contacts);
|
||||
print_groups(contacts);
|
||||
return;
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# SEKUNDÄRVORGÄNGE
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
def get_contacts() -> pd.DataFrame:
|
||||
contacts = {};
|
||||
lines = [];
|
||||
with open(INPUT_CONTACTS, 'r') as fp:
|
||||
lines = fp.readlines();
|
||||
data = [];
|
||||
for line in lines:
|
||||
line = line.strip();
|
||||
if line == '':
|
||||
continue;
|
||||
parts = line.split(r',');
|
||||
for i, part in enumerate(parts):
|
||||
parts[i] = part.strip();
|
||||
for i in [0, 1]:
|
||||
parts[i] = re.sub(r'_', r' ', parts[i]);
|
||||
data.append(dict(
|
||||
key=(parts[1] + ' ' + parts[0]).lower(),
|
||||
surname=parts[0],
|
||||
name=parts[1],
|
||||
email=parts[2],
|
||||
group=parts[3] if len(parts) >= 4 else None,
|
||||
exercise=0
|
||||
));
|
||||
contacts = pd.DataFrame(
|
||||
data=data,
|
||||
index=None,
|
||||
columns=('key', 'surname', 'name', 'email', 'group', 'exercise')
|
||||
);
|
||||
contacts.group = pd.to_numeric(contacts.group, errors='coerce');
|
||||
contacts = contacts.astype(dict(
|
||||
key='string',
|
||||
surname='string',
|
||||
name='string',
|
||||
email='string',
|
||||
group='Int32',
|
||||
exercise='string',
|
||||
));
|
||||
del lines;
|
||||
del data;
|
||||
return contacts;
|
||||
|
||||
def assign_groups(contacts: pd.DataFrame) -> pd.DataFrame:
|
||||
index = 0;
|
||||
lines = [];
|
||||
with open('GROUPS', 'r') as fp:
|
||||
lines = fp.readlines();
|
||||
for line in lines:
|
||||
line = line.strip();
|
||||
if line == '':
|
||||
continue;
|
||||
index += 1;
|
||||
pattern = [];
|
||||
for word in line.split(r','):
|
||||
key = word.strip().lower();
|
||||
if key == '':
|
||||
continue;
|
||||
pattern.append(key);
|
||||
pattern = re.compile('|'.join(pattern));
|
||||
contacts.loc[contacts.key.str.contains(pattern), 'group'] = index;
|
||||
return contacts;
|
||||
|
||||
def assign_exercises(contacts: pd.DataFrame) -> pd.DataFrame:
|
||||
global AUFGABEN;
|
||||
lines = [];
|
||||
with open('EXERCISES', 'r') as fp:
|
||||
lines = fp.readlines();
|
||||
for _, line in enumerate(lines):
|
||||
g = _ + 1;
|
||||
line = line.strip();
|
||||
if line == '':
|
||||
continue;
|
||||
ex = line;
|
||||
AUFGABEN[g] = ex;
|
||||
contacts.exercise = contacts.group.apply(lambda g: AUFGABEN[g] if g in AUFGABEN else pd.NA);
|
||||
return contacts;
|
||||
|
||||
def censor_data(contacts: pd.DataFrame) -> pd.DataFrame:
|
||||
contacts.email = contacts.email.apply(lambda i: re.sub(r'^(.*)(@.*)$', r'____\2', i));
|
||||
return contacts;
|
||||
|
||||
def write_emails(contacts: pd.DataFrame):
|
||||
with open(OUTPUT_EMAILS, 'w') as fp:
|
||||
line = ', '.join(list(contacts.email));
|
||||
fp.write(line + ',\n');
|
||||
return;
|
||||
|
||||
def write_groups(contacts: pd.DataFrame):
|
||||
contacts = contacts \
|
||||
.sort_values(
|
||||
by=['group', 'surname', 'name'],
|
||||
ascending=[True, True, True],
|
||||
na_position='last'
|
||||
) \
|
||||
.reset_index(drop=True);
|
||||
with open(OUTPUT_GROUPS, 'w') as fp:
|
||||
fp.write('GRUPPE, AUFGABE, NACHNAME, VORNAME\n');
|
||||
for _, entry in contacts.iterrows():
|
||||
fp.write('{group}, {ex}, {surname}, {name}\n'.format(
|
||||
surname=entry.surname.upper(),
|
||||
name=entry['name'], # nötig, weil 'name' auch der Index ist
|
||||
email=entry.email,
|
||||
group=entry.group,
|
||||
# group='' if pd.isnull(contacts.group[i]) else contacts.group[i],
|
||||
ex=entry.exercise
|
||||
));
|
||||
return;
|
||||
|
||||
def print_groups(contacts: pd.DataFrame):
|
||||
contacts = contacts \
|
||||
.sort_values(
|
||||
by=['group', 'name', 'surname'],
|
||||
ascending=[True, True, True],
|
||||
na_position='last'
|
||||
) \
|
||||
.reset_index(drop=True);
|
||||
n_groups = max([0] + [_ for _ in contacts.group if isinstance(_, int32)]);
|
||||
for g in list(range(1, n_groups + 1)) + [0]:
|
||||
if g == 0:
|
||||
group = contacts[pd.isnull(contacts.group)].reset_index(drop=True);
|
||||
print('- _keiner Gruppe zugeordnet!_', end='');
|
||||
else:
|
||||
group = contacts[contacts.group == g].reset_index(drop=True);
|
||||
ex = AUFGABEN[g] if g in AUFGABEN else '???';
|
||||
print('- **Gruppe {}** | {} |'.format(g, ex), end='');
|
||||
Ng = len(group);
|
||||
for _, entry in group.iterrows():
|
||||
endchar = ',';
|
||||
if _ == Ng - 1:
|
||||
endchar = '\n';
|
||||
print(' {name}.{surname}'.format(
|
||||
surname=entry['surname'][0].upper(),
|
||||
name=entry['name'][:3].upper(),
|
||||
), end=endchar);
|
||||
return;
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# AUSFÜHRUNG
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
if __name__ == '__main__':
|
||||
main();
|
Loading…
Reference in New Issue
Block a user