Parse groups and users from exported CSV
This commit is contained in:
parent
d37589fd39
commit
64012df977
1 changed files with 71 additions and 0 deletions
71
groupimporter.py
Normal file
71
groupimporter.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
import csv
|
||||
import argparse
|
||||
|
||||
from mimetypes import guess_type
|
||||
|
||||
|
||||
def group_name(longname):
|
||||
"""Use the group number (located at start of group name)"""
|
||||
|
||||
if longname in ['keine Teilnahme an den Übungen', 'keiner Funktion oder Gruppe zugeordnet', 'Gruppe']:
|
||||
return None
|
||||
else:
|
||||
return longname.split(' ')[0]
|
||||
|
||||
|
||||
def parse_groups_csv(csvfile, encoding='utf-8'):
|
||||
"""Reads the names of the groups from CSV file and yields the group names
|
||||
"""
|
||||
|
||||
with open(csvfile, 'r', encoding=encoding) as lines:
|
||||
""" Get distinct values from first column (groups)"""
|
||||
|
||||
reader = csv.reader(lines, delimiter=';', quotechar='"')
|
||||
zipped = list(zip(*reader))
|
||||
|
||||
for groupname in set(zipped[0]):
|
||||
short_name = group_name(groupname)
|
||||
|
||||
"""Discard groups that are None"""
|
||||
if short_name:
|
||||
yield(short_name)
|
||||
|
||||
|
||||
def parse_users_csv(csvfile, encoding='utf-8'):
|
||||
"""Reads user information from a CSV file and yields each user as a dict"""
|
||||
|
||||
with open(csvfile, 'r', encoding=encoding) as lines:
|
||||
reader = csv.DictReader(lines, delimiter=';', quotechar='"')
|
||||
|
||||
for line in reader:
|
||||
yield line['Nutzernamen'], line['E-Mail'], group_name(line['Gruppe'])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
parser = argparse.ArgumentParser(description='Import groups and users from data source')
|
||||
parser.add_argument('course', type=str, nargs=1, help='name of the course')
|
||||
parser.add_argument('source', type=str, nargs=1, help='data source')
|
||||
parser.add_argument('--encoding', type=str, nargs=1, help='encoding of source')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
type, _ = guess_type(args.source[0])
|
||||
|
||||
print(type)
|
||||
|
||||
if type == 'text/csv':
|
||||
|
||||
groupnames = parse_groups_csv(args.source[0], args.encoding[0])
|
||||
|
||||
for group in groupnames:
|
||||
print(args.course[0] + ' ' + group)
|
||||
|
||||
users = parse_users_csv(args.source[0], args.encoding[0])
|
||||
|
||||
for user in users:
|
||||
print(user)
|
||||
|
||||
elif type == None:
|
||||
|
||||
print('MIME type not recognized')
|
Loading…
Add table
Add a link
Reference in a new issue