3. diel - Práca s textovými súbormi v Pythone
V minulej lekcii, Úvod do práce so súbormi v Pythone , sme si ukázali, ako fungujú prístupové práva v systémoch Windows.
Najjednoduchšou cestou, ako uložiť dáta aplikácie na pevný disk, je využiť textové súbory. So súbormi s príponou .txt ste sa určite všetci už stretli. Text je v nich uložený jednoducho na jednotlivých riadkoch. Na oddelenie riadkov sa využívajú špeciálne znaky, ktoré sú bohužiaľ špecifické pre každý operačný systém.
Zápis textu do nového súboru
Najprv si poďme vytvoriť nový textový súbor a niečo do neho zapísať.
Vytvorte si nový "projekt" s názvom main.py
. Na zapisovanie do
textových súborov nám poslúži funkcia open()
, ktorú sme si
už spomenuli minule. Súbor pomocou nej môžeme otvoriť v nasledujúcich 3
módoch:
"w"
- zápis (vytvorenie nového súboru alebo prepísanie existujúceho)"r"
- čítanie"a"
- pripisovanie do súboru
with
a založme v ňom nový file handler na
zápis pomocou funkcie open()
. Ako už vieme z predchádzajúcich
lekcií, with
sa nám automaticky postará o zatvorenie súboru po
dokončení zápisu/čítania (bez bloku with
by sa o to postaral
až garbage collector, ktorý zmaže file handler a až pri zmazaní sa do
súboru zapíše). Do parametrov funkcie napíšeme cestu k nášmu súboru,
módu a kódovaniu. Pretože chceme súbor vytvoriť, mód bude "w"
(zápis):
with open("soubor.txt", "w", encoding="utf-8") as f: pass
Náš file handler je teraz nasmerovaný na správny súbor. Nový riadok
zapíšeme pomocou metódy write()
.
Kód sa nám teda rozrástol a môže vyzerať napr. takto:
with open("soubor.txt", "w", encoding="utf-8") as f: f.write("První řádek\n") f.write("Tento text je na druhém řádku\n") f.write("A do třetice.\n")
Po spustení sa vytvorí soubor.txt
v priečinku s naším
programom. Ako sa
správne v Pythone vysporiadať s cestou k súboru a právami sme si už
ukazovali a tu to pre jednoduchosť zanedbáme. Vidíme, že súbor existuje a
skutočne obsahuje náš text:
Po dokončení zápisu Python automaticky zavolá metódu
flush()
, ktorá sa stará o vyprázdnenie bufferu. S tým sa tu
nebudeme zaťažovať, postačí nám vedieť, že nami zapísané riadky môžu
zostať chvíľu vo vyrovnávacej pamäti. Pokiaľ by ste z nejakého dôvodu
potrebovali vynútiť počas zápisu okamžité zapísanie dát do súboru,
môžete flush()
na file handlere zavolať aj ručne.
Pripísanie textu do existujúceho súboru
Ak súbor neexistuje, kód vyššie ho vytvorí. Ak existuje, bude
prepísaný. Toto správanie môžeme zmeniť pomocou 2. parametra
funkcie open()
. Pokiaľ ho nastavíme na "a"
, vykoná
sa tzv. append (pripísanie). Takto do existujúceho súboru pripíšeme nový
riadok:
with open("soubor.txt", "a", encoding="utf-8") as f: f.write("Připsaný řádek")
Čítanie existujúceho súboru
Zostáva nám už len vedieť súbor načítať. Nie je to o nič
zložitejšie, než zápis. Použitie je obdobné, namiesto metódy
write()
použijeme na file handlere readlines()
,
ktorá vracia všetky riadky textu zo súboru. Jednotlivé riadky vypíšeme vo
for
cykle. Kód na výpis obsahu súboru do konzoly by vyzeral
takto:
with open("soubor.txt", "r", encoding="utf-8") as f: for radek in f.readlines(): print(radek.strip()) # Odstraníme "\n"
Kód celého nášho programu vyzerá teraz asi takto:
# zápis do souboru with open("soubor.txt", "w", encoding="utf-8") as f: f.write("První řádek\n") f.write("Tento text je na druhém řádku\n") f.write("A do třetice.\n") print("Do souboru bylo zapsáno.") # připsání textu do existujícího souboru with open("soubor.txt", "a", encoding="utf-8") as f: f.write("Připsaný řádek") print("Do souboru bylo připsáno.") # výpis obsahu souboru print("Vypisuji soubor:") with open("soubor.txt", "r", encoding="utf-8") as f: for radek in f.readlines(): print(radek.strip()) # Odstraníme "\n"
A výsledok:
Konzolová aplikácia
Do souboru bylo zapsáno.
Do souboru bylo připsáno.
Vypisuji soubor:
První řádek
Tento text je na druhém řádku
A do třetice.
V lekcii sme zabudli odchytávanie výnimiek a kontrolu práv. Do súborov tiež budeme chcieť väčšinou ukladať skôr objekty ako riadky textu. To všetko si ukážeme v budúcej lekcii, Uloženie objektov do CSV v Pythone .
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é 165x (998 B)
Aplikácia je vrátane zdrojových kódov v jazyku Python