2. diel - Úvod do práce so súbormi v Pythone
V minulej lekcii, Výnimky v Pythone , sme si vysvetlili výnimky, ktoré k práci so súbormi nutne potrebujeme, pretože vďaka nim môžeme reagovať na prípadné chyby. Dnes si povieme niečo o súboroch všeobecne ao právach na zápis v systémoch Windows. Po dočítaní tohto Python tutoriálu budete pripravení so súbormi pracovať.
Dáta, resp. objekty uložené v pamäti, sa samozrejme s vypnutím aplikácie stratí. Ak chceme zabezpečiť, aby dáta bola tzv. Perzistentné (trvalá), musíme ich pri ukončení programu uložiť a pri načítaní programu opäť načítať. Na ukladanie dát aplikácie existuje mnoho spôsobov, každý má nejaké výhody a nevýhody. Všeobecne môžeme ukladať dáta našej aplikácie nasledujúcim spôsobom:
- Textové súbory s plochou štruktúrou (tzv. Flat files, napr. .Txt a .csv)
- textové súbory s vnútornou hierarchiou (napr. .xml alebo .json)
- Súbory binárneho typu (jednoducho odtlačok pamäte do súboru)
- databáza
Každý spôsob uloženia dát má svoje výhody a nevýhody. My si jednotlivé spôsoby v Python kurze podrobne popíšeme a hlavne vyskúšame. Zameriame sa najmä na to, ako do súborov ukladať objekty a potom ich znovu načítať. Databázam sa potom venuje samostatná sekcia.
Práva na zápis v systémoch Windows
Od Windows Vista existuje v systémoch Windows tzv. UAC (User Account
Control). Technológia zakazuje zápis na systémovej oblasti disku
(najčastejšie C:\
) v prípade, že zápis nie je povolený
administrátorom alebo že sa nejedná o zápis do osobných priečinkov
používateľa. Toto opatrenie samozrejme naplnilo diskusné fóra o
programovaní a rozbilo rad aplikácií. Dôležité však je, že toto
opatrenie je správne a iba zabraňuje zle napísaným aplikáciám meniť čo
sa im zapáči. Linuxové systémy majú podobné opatrenia už dlhú
dobu.
Koncepcia systému Windows zahŕňa používateľské
kontá. Každý užívateľský účet je realizovaný zložkou
(väčšinou C:\users\jmeno_uzivatele
). Táto zložka obsahuje
okrem iného dokumenty pracovnú plochu a tiež tzv. Zložku s dátami
aplikácií. K tejto zložke sa možno dostať pri zadaní kľúča
%appdata%
do cesty. Skúste si %appdata%
napísať do
cesty prieskumníka a zložku otvoriť. Uvidíte, že v zložke má svoje
podpriečinky mnoho aplikácií, ktoré máte nainštalované. Práve tu
je miesto pre nastavenie vašich aplikácií a ďalšie dáta. Vaše
aplikácie si tu samozrejme vytvorí zložku so svojim menom a do tej si bude
všetko ukladať. Nebudeme obmedzovaní UAC a zároveň bude naša aplikácia
umožňovať iné nastavenie pre rôznych užívateľov, bez toho aby sme to v
Pythone programovali. %appdata%
mieri vždy k appdata aktuálne
prihláseného používateľa.
Veľkou chybou bolo, že si programy ukladali dáta do zložky s programom.
Program na ploche alebo na starých Windows fungoval, však keď sa potom
nainštaloval do zložky program files/
na disku C, spadol s chybou
pri zápise na disk. Windows tento zápis čiastočne pre určité aplikácie
emuloval, ale tým sa nebudeme zaoberať. Problém možno samozrejme obísť
tým, že aplikáciu spustíme ako správca, ale to je zlé riešenie.
V tejto lekcii si ukážeme, ako vytvoriť v appdata zložku pre našu aplikáciu. V ďalších lekciách už v kóde táto logika nebude obsiahnutá a budú slúžiť ako čo najjednoduchšie ukážka práce so súbormi. Ak budete aplikáciu prevádzkovať na svojom počítači, nemusíte sa o nič starať. Akonáhle ju však budete publikovať, je vhodné ju upraviť tak, aby appdata používala.
Už teda vieme, kam budeme zapisovať. Výnimky sme si uviedli tiež. Presuňme sa teda k samotnej práci so súbormi.
IO stream a open ()
V Python existuje tzv. Stream, čo je všeobecný "dátový prúd". Na prúd
sa napojíme a môžeme z neho potom načítavať dáta alebo doň dáta naopak
zapisovať. Prúd je teoreticky univerzálny a ten istý prúd sa môže
nachádzať v pamäti RAM alebo v súbore na disku. Práca so súbormi je teda
realizovaná práve cez stream v knižnici io
. Nebol by to Python,
keby nám nejakým spôsobom prácu neuľahčilo a preto existuje funkcie
open()
, ktorá za nás súborový prúd otvorí. Knižnicu
io
teda ani potrebovať nebudeme.
V tomto kurze sa budeme v každej lekcii zaoberať jedným typom súboru a
vždy si ukážeme, ako s ním pracovať. Teraz si ukážme naprostý základ
toho, ako vytvoriť pre našu aplikáciu zložku v appdata aktuálneho
používateľa. Budeme k tomu používať funkciu os.mkdir()
,
ktorá nám vytvorí zložku. Ďalej sa pozrieme aj samotnú funkciu
open()
. Tak môžeme dáta (napr. Súbor
nastaveni.dat
) vytvoriť s východiskovými hodnotami alebo je
načítať. Pre prácu s cestou použijeme os.path
. Všetky tri
funkcie / knižnice budú podrobne vysvetlené v samostatnej lekcii, teraz si
ukážeme len to nevyhnutné. Poďme teda napísať aplikáciu, ktorá bude mať
vlastný priečinok v AppData a pozrie sa, či existuje jej súbor
databaze.dat
:
import os cesta = "" try: cesta = os.path.join(os.getenv("APPDATA"), "ITnetwork") if not os.path.exists(cesta): os.mkdir(cesta) except: print("Nepodařilo se vytvořit složku {0}, zkontrolujte prosím svá oprávnění.".format(cesta)) if os.path.exists(os.path.join(cesta, "databaze.dat")): try: # Zde umístěte kód pro načtení vašeho nastavení ze souboru pass except Exception as e: print("Při načítání nastavení došlo k následující chybě: {0}".format(e)) else: try: # Zde umístěte kód pro vytvoření vašeho nastavení pass except Exception as e: print("Při vytvoření nastavení došlo k následující chybě: {0}".format(e)
Najprv si uložíme cestu k priečinku s našou aplikáciou do textového
reťazca cesta
. Lokácii appdata získame pomocou:
os.getenv("APPDATA")
Python si sám nájde cestu k %appdata%
v prostredí, ktorá
bude niečo také (záleží na verziu Windows):
C:\Users\vase_jmeno\AppData\Roaming
Do cesty pridáme ešte zložku s menom našej aplikácie. Meno som zvolil
ITnetwork/
, samozrejme si ho potom upravte. Aby sme nemuseli
premýšľať, či cesty obsahujú na konci lomeno alebo či má byť lomeno
spätné alebo obyčajné, spojíme cestu pomocou funkcie
os.path.join()
v knižnici os
(používame len vtedy,
ak chceme pracovať so súbormi na viacerých platformách, akonáhle tejto
funkcii ako parameter / argument odovzdáme napríklad "C:\\"
,
funkcia stráca význam). V cesta
je teda teraz toto:
C:\\Users\\vase_jmeno\\AppData\\Roaming\\ITnetwork
Ak daná zložka neexistuje (ide o prvé spustenie aplikácie), tak ju vytvoríme. Ďalej sa pozrieme, či existuje súbor, z ktorého chceme dáta načítať. Ak áno, vykonáme načítanie dát. Ak nie, súbor vytvoríme a nahráme do neho východiskovej dáta. Alebo súbor vytvárať ani nebudeme, záleží na type aplikácie.
Po spustení kódu sa nám v priečinku %appdata%
objaví nová
zložka:
Máme teda rýchly úvod, ako správne ukladať dáta aplikácie. O výnimkách sme si tiež povedali. Nič nám už nebráni, aby sme si v budúcej lekcii, Práca s textovými súbormi v Pythone , ukázali prácu s prvým formátom súborov, budú to textové súbory. Ešte radšej zopakujem, že v nasledujúcich lekciách kvôli jednoduchosti nebudem riešiť zapisovať práva a programy budú fungovať len v zložkách užívateľa (napr. Pri spustení z vášho IDE). Vždy sa teda vráťte sem a kód si upravte, ak hotovú aplikáciu budete chcieť šíriť.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 172x (474 B)
Aplikácia je vrátane zdrojových kódov v jazyku Python