11.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M U J E M EV zajatí Pytho<strong>na</strong> / 5. èasVítam vás pri piatom pokraèovaní nášho seriálu. Asi sa to ani nezdá, ale prepracovali sme sauž k predposlednej èasti. Zo všetkých dôležitých tém Pytho<strong>na</strong> nám zostáva pozrie sa <strong>na</strong>vstup/výstup, chyby/výnimky a, samozrejme, <strong>na</strong> objektovo orientované programovanie.Témou tohto èísla mal by pôvodne len vstup/výstup, ne<strong>sk</strong>ôr som sa však rozhodol, žepriberiem aj kapitolu o chybách a výnimkách – ve¾mi zaujímavé èítanie! Medzièasom sa námstihla prebi <strong>na</strong> svetlo sveta aj finál<strong>na</strong> verzia Pytho<strong>na</strong> 2.0. Zmien je to¾ko, že ich zpriestorových dôvodov ani všetky nemôžem vymenova . Najdôležitejšie som aj tak spomenulv predošlej èasti seriálu a tie zvyšné sa dajú nájs pod http://<strong>www</strong>.python.org/2.0/. Na vy<strong>sk</strong>úšaniepríkladov v <strong>na</strong>šom seriáli vám bude staèi aj verzia 1.52, ak však máte možnos , downloadverzie 2.0 môžem len odporúèa . Prajem vám príjemné èítanie!Vstup a výstup do súboruFunkcia open(‘subor’,’mod’) vracia objekt s ukazovate¾om <strong>na</strong> súbor, s ktorým budemepracova („otvorí súbor“). Prvý argument tejto funkcie udáva cestu k súboru. Druhý argument,ktorý nie je povinný, udáva mód, v akom budeme so súborom pracova . Akvynecháme tento argument, použije sa mód <strong>na</strong> èítanie zo súboru (r). Príklad:>>> subor=open(‘test.txt’, ‘a’) #otvorime subor <strong>na</strong> zapis <strong>na</strong>koniec>>> subor #zobrazi vlastnosti ukazovatela <strong>na</strong> subor>>> druhy_subor=(‘file’) #subor file sa otvori v mode <strong>na</strong> citaniemódrwaopistextový súbor <strong>na</strong> èítanietextový súbor <strong>na</strong> zápis; ak existuje rovnomenný súbor, bude prepísanýtextový súbor <strong>na</strong> zápis <strong>na</strong> koniec súborur+ textový súbor <strong>na</strong> èítanie a zápisw+ textový súbor <strong>na</strong> èítanie, zápis alebo prepísanie v prípade, ak existuje rovnomenný súbora+ textový súbor <strong>na</strong> èítanie a zápis <strong>na</strong> koniec súborurbwbabrb+wb+ab+Módy otvárania súborovbinárny súbor <strong>na</strong> èítaniebinárny súbor <strong>na</strong> zápis; ak existuje rovnomenný súbor, bude prepísanýbinárny súbor <strong>na</strong> zápis <strong>na</strong> koniec súborubinárny súbor <strong>na</strong> èítanie a zápisbinárny súbor <strong>na</strong> èítanie, zápis alebo prepísanie v prípade, ak existuje rovnomenný súborbinárny súbor <strong>na</strong> èítanie a zápis <strong>na</strong> koniec súboruPoužíva binárne módy má zmysel len s Windows a Macintosh. Pod OS Unix je jedno,èi použijete binárne módy alebo textové.Základné metódy <strong>na</strong> prácu so súboromAby práca so súbormi mala zmysel, musíme vedie , ako preèíta a zapísa dáta zo/dosúboru.Èítanie zo súboruNa èítanie obsahu súboru slúži metóda read(kolko), ktorá preèíta súbor a vráti preèítanédáta. Jej argument udáva, ko¾ko z<strong>na</strong>kov chceme preèíta . Ak je tento argument negatívnyalebo sa rovná nule, preèíta a vráti sa celý súbor <strong>na</strong>raz. Nie je vhodné èíta celé súbory<strong>na</strong>raz, pretože sa tým plytvá pamä poèítaèa. Po preèítaní celého súboru nevracia metódahodnotu EOF, ako je to zvykom v iných jazykoch, ale len prázdny re azec (“”).>>> f=open(‘test.txt’) #otvorime subor <strong>na</strong> citanie>>> f.read(15)‘ukazkovy subor\012’Èíta v súbore sa zaèí<strong>na</strong> vždy úplne <strong>na</strong> zaèiatku súboru, <strong>na</strong> pozícii 0. Po preèítaní urèitéhomnožstva sa bude èíta od pozície, kde sa <strong>sk</strong>onèilo predchádzajúce èítanie. Napríklad v<strong>na</strong>šom uvedenom príklade sa zaène ïalšie èítanie od z<strong>na</strong>ku 15. Pohybu v súboroch je venovanývlastný odsek.>>> f.read() #citane uplne do konca suboru‘2. riadok\012Metóda readline() vráti jeden riadok zo súboru, prièom vráti aj z<strong>na</strong>k konca riadka (\<strong>na</strong>lebo \012). Pri prázdnych riadkoch je vrátený len z<strong>na</strong>k konca riadka. Podobne ako metódaread() vracia metóda readline() prázdny re azec (‘’) po dosiahnutí konca súboru.>>> f=open(‘test.txt’)>>> f.readline() #precitame druhy riadok‘ukazkovy subor\012’>>> f.readline() #precitame prvy riadok‘2. riadok\012’>>> f.readline() #koniec suboru‘’Ïalšia metóda readlines() vráti pole obsahujúce všetky riadky v súbore.>>> f=open(‘test.txt’)>>> f.readlines()[‘ukazkovy subor\012’, ‘2. riadok\012’]Zápis do súboruDo súboru, ktorý sme otvorili s opciou zápisu (pozri tabu¾ku s módmi), je možné pomocoumetódy write(retazec) zapisova dáta. Táto metóda zapíše re azec, ktorý je jejodovzdaný, ako argument do súboru a vráti None (aby sa to ¾ahšie pochopilo, dá sa ajpoveda , že metóda write(retazec) nevráti nijakú hodnotu).>>> f=open(‘test.txt’,’a+’)>>> f.write(‘3. riadok’)>>> f.read()‘’V tomto prípade vracia metóda read() prázdny riadok, pretože pozícia v súbore saposunula za zapísaný text <strong>na</strong> koniec súboru.Zme<strong>na</strong> pozície v súboreAko ste si všimli, všetky metódy <strong>na</strong> prácu so súbormi, <strong>na</strong> ktoré sme sa doteraz pozreli,posúvajú automaticky pozíciu v súbore. Momentálnu pozíciu v súbore zistíme metódoutell(), ktorá vracia prirodzené èíslo udávajúce poèet z<strong>na</strong>kov medzi zaèiatkom súboru amomentálnou pozíciou v súbore.Na zmenu pozície v súbore slúži metóda seek(kolko, odkial). Pozícia, kde sa premiestnimev rámci súboru, sa vypoèíta spoèítaním argumentu kolko s argumentom odkial.Argument odkial môže ma tri hodnoty:l 0 – zaèiatok súborul 1 – momentál<strong>na</strong> pozícial 2 – koniec súboruAk sa argument odkial vynechá, bude sa poèíta od zaèiatku súboru (štandardná hodnota0). Príklady:>>> f=open(‘test.txt’,’r’)>>> f.read(8) #metoda read() <strong>na</strong>s automaticky presunie <strong>na</strong> 8. z<strong>na</strong>k‘ukazkovy’>>> f.seek(-1,2); f.tell() #<strong>na</strong> posledny z<strong>na</strong>k42>>> f.seek(-10,1); f.tell() #o 10 z<strong>na</strong>kov dopredu32>>> f.seek(5); f.tell() #<strong>na</strong> 5. z<strong>na</strong>k od zaciatku suboru5Zatvorenie otvoreného súboruHoci neuzatvorené súbory budú automaticky uzavreté operaèným systémom pri ukonèenínášho programu, je dobré si zvyknú uzatvára súbory metódou close(). Šetríme týmpamä poèítaèa.>>> f=open(‘test.txt’,’a’)>>> f.close()>>> f.read()Traceback (innermost last):File “”, line 1, in ?ValueError: I/O operation on closed filePo uzatvorení súboru prestane fungova ukazovate¾ <strong>na</strong> tento súbor. Použitie ukazovate¾auž zatvoreného súboru vyvolá chybu. Chyby a výnimky sú ïalšia ve¾ká kapitolaPytho<strong>na</strong>. Aby sme však nepredbiehali, dokonèíme <strong>na</strong>jprv kapitolu o vstupe/výstupeodsekom o ve¾mi dôležitom module pickle.Modul pickleDoteraz sme pracovali len s re azcami. Ak sme nieèo zapísali do súboru, tak to bolre azec. Takisto sme pracovali s re azcami pri èítaní zo súboru, keïže všetky funkcie <strong>na</strong>èítanie vracajú re azce. Situácia sa nám trošku <strong>sk</strong>omplikuje, ak chceme pracova s èíslami.Ak zapíšeme èíslo do súboru, uloží sa nám ako re azec. Keï ho ne<strong>sk</strong>ôr èítame, musímeho <strong>sk</strong>onvertova <strong>na</strong> èíslo pomocou funkcie eval(). Ukladaním polí, tuple, slovníkov alebo<strong>na</strong>pr. tried sa nám život ešte viac <strong>sk</strong>omplikuje. Dokonca sa môže zda , že je to nemožné.Ako teda uloži tieto dátové typy? Keïže nie sme jediní, ktorí mali podobný problém,vznikol modul pickle, pomocou ktorého uložíme aj <strong>na</strong>jkomplikovanejšie dátové typyPytho<strong>na</strong>. Po importovaní modulu pickle môžeme jeho metódou dump(co, ukazovatel_<strong>na</strong>_subor)uklada rozlièné dátové typy do súboru a pomocou metódy load(ukazovatel_<strong>na</strong>_subor)ich èíta .>>> import pickle, sys>>> f=open(‘notes’,’w’)>>> telcisla={‘robert’:’183 426’,’manfred’:’684 158’}>>> pickle.dump(telcisla,f) #ulozime slovnik “telcisla”126 PC REVUE 12/2000

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!