1
0
Fork 0
This commit is contained in:
Przemysław Kaczmarek 2018-01-11 21:14:43 +01:00
parent c1259d2d03
commit dce7564e23
1 changed files with 33 additions and 2 deletions

View File

@ -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__":