====== Zpracování argumentů na příkazové řádce: modul ''argparse'' ====== Hodně užitečných nástrojů pro uživatele počítačů má formu příkazů/skriptů spouštěných z příkazové řádky (''ls'', ''dir'', ''grep'', ...). Tyto příkazy obvykle přijímají argumenty uvedené na příkazové řádce za příkazem (např. ''ls -la''), které ovlivňují chování příkazu. Python obsahuje standardní modul [[https://docs.python.org/3/library/argparse.html|argparse]] ([[https://docs.python.org/3/howto/argparse.html|tutorial]]), který umožňuje snadno konfigurovat možné parametry skriptu a následně je snadno zpracovat. ===== Využití v úloze klasifikace znaků ===== Skript, který máte vytvořit, se má chovat podle [[courses:b3b33kui:cviceni:strojove_uceni:start#specifikace|specifikací]]. To lze zajistit např. tak, že modul ''argparse'' nakonfigurujete následujícím způsobem: import argparse def setup_arg_parser(): parser = argparse.ArgumentParser(description='Learn and classify image data.') parser.add_argument('train_path', type=str, help='path to the training data directory') parser.add_argument('test_path', type=str, help='path to the testing data directory') mutex_group = parser.add_mutually_exclusive_group(required=True) mutex_group.add_argument('-k', type=int, help='run k-NN classifier (if k is 0 the code may decide about proper K by itself') mutex_group.add_argument("-b", help="run Naive Bayes classifier", action="store_true") parser.add_argument("-o", metavar='filepath', default='classification.dsv', help="path (including the filename) of the output .dsv file with the results") return parser Když pak tuto funkci použijete takto: parser = setup_arg_parser() args = parser.parse_args() print(args.train_path) proměnná ''args'' bude obsahovat všechny potřebné informace předané skriptu na příkazové řádce a můžete s nimi dál pracovat. ===== Kostra modulu ''classifier.py'' ===== Výše uvedený kód najdete v souboru {{ :courses:b3b33kui:cviceni:strojove_uceni:classifier.py |}}, který můžete použít jako výchozí kostru vašeho řešení. Pokud tento modul spustíte jako python3 classifier.py -k 3 ./train_data ./test_data měli byste vidět následující výstup: Training data directory: ./train_data Testing data directory: ./test_data Output file: classification.dsv Running k-NN classifier with k=3 tedy * adresáře s trénovacími a testovacími daty specifikované na příkazové řádce, * název výstupního souboru, který na příkazové řádce specifikován nebyl a ''argparse'' doplnil výchozí hodnotu, a * zvolený typ klasifikátoru (k-NN) s číselným argumentem. (Klasifikátor ale musíte implementovat sami. :-) )