2. diel - Úvod do práce so súbormi v Pythone
V minulej lekcii, Výnimky v Pythone, sme si vysvetlili výnimky, ktoré na prácu 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 a o 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 stratia. Ak chceme zaistiť, aby dáta boli 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 znova 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émový oddiel disku
(najčastejšie C:\
) v prípade, že zápis nie je povolený
administrátorom alebo že nejde o zápis do osobných zložiek používateľa.
Toto opatrenie samozrejme naplnilo diskusné fóra o programovaní a rozbilo
množstvo 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é
účty. Každý používateľský účet je realizovaný zložkou
(väčšinou C:\users\user_name
). Táto zložka obsahuje okrem
iného dokumenty, pracovnú plochu a tiež tzv. zložku s dátami aplikácií. K
tomuto priečinku sa dá 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 priečinku 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ša aplikácia 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é
nastavenia pre rôznych použí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, avšak keď sa potom
nainštaloval do priečinka 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 sa dá 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 appdate 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šia ukážka práce so súbormi. Pokiaľ 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čítať dáta alebo do neho 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čil a preto existuje funkcia
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 úplný základ
toho, ako vytvoriť pre našu aplikáciu zložku v appdate aktuálneho
používateľa. Budeme na to 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 settings.dat
)
vytvoriť s predvolenými hodnotami alebo ich 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 database.dat
:
import os path = "" try: path = os.path.join(os.getenv("APPDATA"), "ICTdemy") if not os.path.exists(path): os.mkdir(path) except: print("Program failed to create a {0} folder, please check your privileges.".format(path)) if os.path.exists(os.path.join(path, "database.dat")): try: # Place your code for loading your settings from the file here pass except Exception as e: print("Error while loading the settings: {0}".format(e)) else: try: # Place your code for creating your settings here pass except Exception as e: print("Error while creating the settings: {0}".format(e))
Najprv si uložíme cestu k priečinku s našou aplikáciou do textového
reťazca path
. Lokáciu 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 verzii Windows):
C:\Users\your_name\AppData\Roaming
Do cesty pridáme ešte zložku s menom našej aplikácie. Meno som zvolil
ICTdemy/
, 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 iba 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 path
je teda teraz toto:
C:\\Users\\your_name\\AppData\\Roaming\\ICTdemy
Pokiaľ daná zložka neexistuje (jedná sa o prvé spustenie aplikácie), tak ju vytvoríme. Ďalej sa pozrieme, či existuje súbor, z ktorého chceme dáta načítať. Pokiaľ áno, vykonáme načítanie dát. Ak nie, súbor vytvoríme a nahráme do neho predvolené dáta. Alebo súbor vytvárať ani nebudeme, záleží na type aplikácie.
Po spustení kódu sa nám v zložke %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. Ešte radšej zopakujem, že v nasledujúcich lekciách kvôli jednoduchosti nebudem riešiť zápisové práva a programy budú fungovať len v zložkách používateľa (napr. pri spustení z vášho IDE). Vždy sa teda vráťte sem a kód si upravte, pokiaľ hotovú aplikáciu budete chcieť šíriť.
V ďalšej lekcii, Práca s textovými súbormi v Pythone , si ukážeme prácu s prvým formátom súborov, budú to textové súbory.
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é 0x (1.01 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python