diff --git a/labs05/task04.py b/labs05/task04.py index 4dfc78c..bf533d1 100644 --- a/labs05/task04.py +++ b/labs05/task04.py @@ -4,9 +4,19 @@ """ Implementacja narzedzia ``wc`` z linuksa (word counter). Zwraca liczbę słów, znaków i linii. + +** zad. 4 (Domowe) ** +Plik ``task04.py`` zawiera kod prorgamu, który działa jak popularne narzędzie unixowe ``wc`` (Word Counter): zlicza liczbę linii, wyrazów i znaków. +Aktualnie program potrafi działać wyłącznie na wejściu podanym z klawiatury. Dodaj do niego opcje programu: + * domyślnie program ma zliczać na wejściu z klawiatury (stdin) i wyświetlać wszystkie 3 liczby. + * Jeżeli został podany przełącznik `-l`, to to ma zostać zwrócona tylko liczba linii. + * Jeżeli został podany przełącznik `-w`, to to ma zostać zwrócona tylko liczba słów. + * Jeżeli został podany przełącznik `-c`, to to ma zostać zwrócona tylko liczba znaków. + * Jeżeli został podany inny argument, to należy założyć że jest to nazwa pliku i potraktować ten plik jako wejście do programu. """ import sys +import argparse def count_lines(text): @@ -19,7 +29,7 @@ def count_words(text): for line in text.split('\n')]) def count_chars(text): - """ return number of words. """ + """ return number of characters. """ return len(text) def wc(text): @@ -32,7 +42,28 @@ def wc(text): def main(): """ main """ - print(wc(sys.stdin.read())) + parser = argparse.ArgumentParser() + parser.add_argument('-l', help="number of lines", action="store_true") + parser.add_argument('-w', help="number of words", action="store_true") + parser.add_argument('-c', help="number of chars", action="store_true") + parser.add_argument('-filename', type=argparse.FileType('r'), default='-', help='filename to read from') + args = parser.parse_args() + + if args.filename: + lines, words, chars = wc(args.filename.read()) + elif not sys.stdin.isatty(): + lines, words, chars = wc(args.stdin.read()) + else: + pass + + if(args.l): + print(lines) + elif(args.w): + print(words) + elif(args.c): + print(chars) + else: + print(lines, words, chars) if __name__ == "__main__":