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:

Úlohy na procvičení

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 soubor by program měl vypsat True (soubor existuje).
  • Při spuštění příkazu python file_exists.py neexistujici_soubor by program měl vypsat False (soubor neexistuje).
  • Při spuštění příkazu python file_exists.py by program měl vypsat chybovou hlášku, že nebyla specifikována cesta k souboru (to argparse udě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 soubor by program měl vypsat True (soubor existuje).
  • Při spuštění příkazu python file_exists.py -f soubor by program měl vypsat True (soubor existuje).
  • Při spuštění příkazu python file_exists.py soubor -f by program měl vypsat True (na pořadí argumentů nezáleží – to za vás řeší argparse).
  • Při spuštění příkazu python file_exists.py -d soubor by program měl vypsat False (soubor není složka).
  • Při spuštění příkazu python file_exists.py -d slozka by program měl vypsat True (složka existuje).
  • Při spuštění příkazu python file_exists.py -f -d slozka by 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

Učební výstupy

Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.

  • vědět o existenci standardní knihovny (můžeme využít kód, který už za nás naprogramoval někdo jiný) a kde najít dokumentaci
  • zachytit důležité momenty v běhu programu pomocí logovacích zpráv s různou úrovní detailu (debug, info, warning, error) – modul logging
  • použít logovací zprávy pro ladění (bez breakpointů a krokování)
  • umět vytvořit a použít výčtový datový typ (modul enum)
  • načíst a zpracovat argumenty z příkazové řádky (sys.argv, modul argparse)