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 soubor
by program měl vypsatTrue
(soubor existuje). - Při spuštění příkazu
python file_exists.py neexistujici_soubor
by program měl vypsatFalse
(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 (toargparse
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 vypsatTrue
(soubor existuje). - Při spuštění příkazu
python file_exists.py -f soubor
by program měl vypsatTrue
(soubor existuje). - Při spuštění příkazu
python file_exists.py soubor -f
by 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 soubor
by program měl vypsatFalse
(soubor není složka). - Při spuštění příkazu
python file_exists.py -d slozka
by program měl vypsatTrue
(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