Programování 1 – 6. cvičení
Přehled základních knihoven v Pythonu
Přehled všech standardních knihoven je v dokumentaci Pythonu. My si ukážeme jen několik z nich:
sys- Přístup k interpretu Pythonu (např. čtení argumentů z příkazové řádky, vypisování na chybový výstup).
- dokumentace
- příklad použití
enum- Definice výčtových datových typů – když máme nějakou předem známou množinu možných hodnot.
- dokumentace
- příklad použití
logging- Informační a ladící výpisy.
- dokumentace
- příklad použití
argparse- Zpracování argumentů z příkazové řádky.
- dokumentace
- příklad použití
os- Rozhraní k operačnímu systému (např. vytváření složek, přesouvání souborů, spouštění příkazů).
- dokumentace
- příklad použití
pathlib- Reprezentace cest k souborům a složkám a práce s nimi.
- dokumentace
- příklad použití
random- Generování náhodných čísel.
- dokumentace
- příklad použití
csv- Čtení a zápis formátu CSV (comma-separated values).
- dokumentace
- příklad čtení (stáhněte si taky
sample.csv) - příklad zápisu
json- Čtení a zápis formátu JSON (JavaScript Object Notation).
- dokumentace
- příklad čtení (stáhněte si taky
sample.json) - příklad zápisu
Cvičení na použití knihoven
Ladění pomocí logování
Program average_grade.py by měl počítat průměrnou známku několika studentů zaokrouhlenou na dvě desetinná místa. Bohužel, v programu je několik chyb. Vaším úkolem je chyby najít a odstranit. Využijte při tom záznamy z logování – když program spustíte, uloží se logy do souboru average_grade.log. Pak můžete logy v souboru projít a najít v nich chyby, které při běhu programu nastaly.
Existence souboru
Pomocí knihoven argparse a pathlib vytvořte program, který bude ověřovat existenci souboru.
Program dostane cestu k souboru jako svůj poziční argument na příkazové řádce. Výstupem by mělo být True nebo False podle toho, jestli daný soubor existuje.
Příklady
Předpokládejme, že váš program se jmenuje file_exists.py a že existuje soubor jménem soubor.
- Při spuštění příkazu
python file_exists.py souborby program měl vypsatTrue(soubor existuje). - Při spuštění příkazu
python file_exists.py neexistujici_souborby program měl vypsatFalse(soubor neexistuje). - Při spuštění příkazu
python file_exists.pyby program měl vypsat chybovou hlášku, že nebyla specifikována cesta k souboru (toargparseudělá za vás).
🦉 Bonus: Soubory a složky
Doplňte do programu další dva volitelné argumenty (options). Pokud je nastaven option -f, program ověřuje, že zadaná cesta existuje a je to soubor (ne složka). Pokud je nastaven option -d, program ověřuje, že zadaná cesta existuje a je to složka (ne soubor). Pokud jsou nastaveny oba optiony, program vypíše chybu, že nejde použít oba optiony najednou.
Předpokládejme, že váš program se jmenuje file_exists.py a že existuje soubor jménem soubor a složka jménem slozka.
- Při spuštění příkazu
python file_exists.py souborby program měl vypsatTrue(soubor existuje). - Při spuštění příkazu
python file_exists.py -f souborby program měl vypsatTrue(soubor existuje). - Při spuštění příkazu
python file_exists.py soubor -fby program měl vypsatTrue(na pořadí argumentů nezáleží – to za vás řešíargparse). - Při spuštění příkazu
python file_exists.py -d souborby program měl vypsatFalse(soubor není složka). - Při spuštění příkazu
python file_exists.py -d slozkaby program měl vypsatTrue(složka existuje). - Při spuštění příkazu
python file_exists.py -f -d slozkaby program měl vypsat chybu (nejde použít oba optiony současně).
Načtení seznamu osob z CSV
V souboru lide.csv je seznam jmen, e-mailů a telefonů několika lidí ve formátu CSV. Pomocí knihovny csv načtěte data ze souboru a vypište je v následujícím formátu:
Osoba: <name> <surname>
E-mail: <email>
Telefon: <phone>
Například pro soubor lide.csv:
name,surname,email,phone
Michal,Töpfer,topfer@d3s.mff.cuni.cz,123456789
Tomáš,Holan,holan@ksvi.mff.cuni.cz,111222333
vypište
Osoba: Michal Töpfer
E-mail: topfer@d3s.mff.cuni.cz
Telefon: 123456789
Osoba: Tomáš Holan
E-mail: holan@ksvi.mff.cuni.cz
Telefon: 111222333
Caesarova šifra
Doplňte řešení úlohy Caesarova šifra textu – soubor o načítání argumentů z příkazové řádky (pomocí knihovny argparse):
-f– vstupní soubor,-o– výstupní soubor,-k– hodnota klíče (posunu).
Program se pak spustí třeba takto: python caesar.py -f in.txt -o out.txt -k 3.
Generování náhodných CSV souborů podle JSON konfigurace
Na základě konfigurace uložené v JSON souboru config.json vygenerujte CSV soubor random.csvý s náhodnými hodnotami. Použijte knihovny json, csv a random.
Konfigurace obsahuje položky "rows" a "columns". Položka "rows" je celé číslo udávající, kolik řádků máte vygenerovat. Položka "columns" obsahuje seznam konfigurací sloupců. Každý sloupec má jméno ("name") a typ ("type"). Pokud je typ "number", obsahuje konfigurace sloupce navíc hodnoty "low" a "high" a vaším cílem je generovat náhodné číslo z tohoto rozsahu. Pokud je typ "choices", obsahuje definice sloupce navíc seznam "choices" a vaším cílem je generovat náhodnou položku ze seznamu.
Příklad konfigurace:
{
"rows": 5,
"columns": [{
"name": "kostka",
"type": "number",
"low": 1,
"high": 6
},{
"name": "mince",
"type": "choices",
"choices": ["panna", "orel"]
}]
}
Vaším cílem je vygenerovat CSV soubor o daném počtu řádků, přičemž hodnota buňky je vždy náhodně vygenerovaná podle konfigurace daného sloupce. Nezapomeňte do CSV souboru napsat jména sloupců jako hlavičku.
Například pro konfiguraci výše (config.json) je možný výstup (random.csv) následovný:
kostka,mince
3,orel
1,orel
3,panna
5,orel
6,panna