#! /usr/bin/env python3 def read_file(path: str) -> "List of lines": #f = open(path, 'r') with open(path, 'r') as f: # f.read(buflen) - binary read # f.readline() - 1 Textzeile lesen -> str # f.readlines - alle Textzeilen lesen ->str # f ist gleichzeitig Iterator # 1 möglichkeit #lines = list(map(lambda s : s.rstrip(), f)) # 2 möflichkeit lines = list(map(str.rstrip, f)) # 3 möglichkeit #lines = [] #for line in f.readlines(): # lines.append(line.rstrip()) #f.close() return lines def parse_passwd_lines(line: str) -> "Dict of passwd details": parts = line.split(':') userdict = { "username" : parts[0], "uid" : parts[2], "gid" : parts[3], "gecos" : parts[4], "home" : parts[5], "shell": parts[6] } return userdict def build_userlist(lines) -> "List of user dicts": result = [] for line in lines: result.append(parse_passwd_lines(line)) return result def print_userlist_sorted_by_username(userlist): #ruft für jedes Element key(elem) also e im Lambda-Ausdruck ist ein Element der Liste user dict for user in sorted(userlist, key=lambda e: e['username'].lower()): print( user['username'], user['uid'], user['gecos'], user['home'], user['shell'] ) def print_userlist_sorted_by_uid(userlist): pass def main(): output_functions = { 'username': print_userlist_sorted_by_username, 'uid': print_userlist_sorted_by_uid, } outfunc = output_functions['username'] lines = read_file("/etc/passwd") userlist = build_userlist(lines) outfunc(userlist) main()