Súbor otvárame volaním štandardnej funkcie open(), ktorej oznámime meno súboru, ktorý chceme čítať. Táto funkcia vráti referenciu na súborový objekt (hovoríme tomu aj dátový prúd, t.j. stream). Do súborovej premennej sa priradí spojenie s uvedeným súborom
subor = open('nazov_suboru.txt', 'r')
subor= open('c:/dokumenty/nazov_suboru.txt', 'r')
subor = open('../texty/nazov_suboru.txt', 'r') # relatívna cesta
Hoci znakové reťazce sa v Pythone uchovávajú v kódovaní Unicode, pri práci so súbormi, ktoré obsahujú znaky s diakritikou, musíme upresniť aj kódovanie v súbore. Samotné súbory môžu mať pri uložení na disku rôzne kódovania (závisí to aj od vášho operačného systému). Takými kódovaniami môžu byť, napríklad ‚cp1250‘, ‚iso88591‘, ‚utf-8‘, … a pri ich otváraní treba toto kódovanie uvádzať ako parameter funkcie open(). Súbory, ktoré dostanete na čítanie v tomto kurze, budú mať väčšinou kódovanie ‚utf-8‘, ale vaše vlastné súbory môžu mať aj iné kódovanie.
Najčastejšie sa číta po jednom riadku metódou subor.readline(), po prečítaní už len uzavrieme otvorené spojenie metódou subor.close().
subor = open('zlta_lalia.txt', 'r', encoding='utf8')
#načítame prvý riadok
riadok = subor.readline()
# pokiaľ sa nedostaneme na koniec
while riadok != "":
riadok = subor.readline()
# parameter end štandardne končí novým riadkom \n, môžme to zmeniť za nič ""
print(riadok, end="")
subor.close()
Výsledkom je:
Na mohyle zlá chvíľa,
na mohyle tŕnie,
chrastie a v tom tŕní,
chrastí rastie, rastie,
kvety rozvíja jedna žltá ľalija.
Ďalšou možnosťou zápisu je použitie for cyklu, funkcie repr() a metódy rstrip():
subor = open('zlta_lalia.txt', 'r', encoding='utf8')
for riadok in subor :
print(repr(riadok.rstrip()))
subor .close()
Výsledkom je:
'Stojí, stojí mohyla.'
'Na mohyle zlá chvíľa,'
'na mohyle tŕnie,'
'chrastie a v tom tŕní,'
'chrastí rastie, rastie,'
'kvety rozvíja jedna žltá ľalija.'
Pozor! Vo for-cykle, ktorý prechádza riadky súboru, sa nevolá readline(), lebo by nám program preskočil niektoré riadky!
Ak chcem načítať celý textový súbor do jednej premennej máme dve možnosti. Buď budeme pripočítavať do jednej premennej vo for cykle, alebo použijeme metódu read().
subor = open('zlta_lalia.txt', 'r', encoding='utf8')
cely_subor = ""
for riadok in subor :
cely_subor = cely_subor + riadok
subor .close()
print(cely_subor, end='')
# pomocou metódy read()
subor = open('zlta_lalia.txt', 'r', encoding='utf8')
print(subor.read())
subor.close()
Výsledok je rovnaký:
Stojí, stojí mohyla.
Na mohyle zlá chvíľa,
na mohyle tŕnie,
chrastie a v tom tŕní,
chrastí rastie, rastie,
kvety rozvíja jedna žltá ľalija.
Zapisovanie do súboru
Zapisovanie do súboru je veľmi podobné ako čítanie. Opäť je potrebné priradiť do súborovej premennej spojenie, jedna zmena v parametroch a to druhý parameter nebude „r“ (‚read‘) ale „w“ (‚write‘)…
# Nakoľko súbor neexistuje, vytvorí sa
subor = open('cisla.txt', 'w', encoding='utf8')
for i in range(5):
subor.write(f'Tvoje číslo je {i}\n')
subor.close()
Ide to aj cez funkciu print(), áno aj toto dokáže..
subor = open('cisla.txt', 'w', encoding='utf8')
for i in range(5):
print(f'Tvoje číslo je {i}\n' ,end="", file=subor)
subor.close()
Tvoje číslo je 0
Tvoje číslo je 1
Tvoje číslo je 2
Tvoje číslo je 3
Tvoje číslo je 4
Kopírovanie z jedného súboru do druhého
Keď kopírujeme z jedného súboru do druhého s parametrom „w“ sa vždy súbor do ktorého zapisujeme prepíše, neskôr si ukážeme, ako zapisovať bez toho aby sa prepísal.
Vytvoril som si 2 súbory, v prvom je „Toto je súbo č.1“ a druhom „Toto je súbo č.1“,
Chceme skopírovať dáta z prvého a prilepiť do druhého súboru, tak aby sme neprepísali pôvodný ale len doplnili
#súbor z ktorého niečo načítame
zdroj_subor = open('text1.txt', 'r', encoding='utf8')
zdroj = zdroj_subor.read()
zdroj_subor.close()
# súbor z ktorého načítame a aj vložíme
povodny_subor = open('text2.txt', 'r', encoding='utf8')
povodny = povodny_subor.read()
povodny_subor.close()
vystup_subor = open('text2.txt', 'w', encoding='utf8')
vystup_subor.write(zdroj + povodny)
vystup_subor.close()
Toto je súbo č.1
Toto je súbo č.2
Oveľa častejší zápis práce zo súbormi je s konštrukciou with:
Načítanie súboru:
with open('zlta_lalia.txt', 'r', encoding='utf8') as subor:
print(subor.read())
Zápis súboru:
with open('test_subor.txt', 'w') as file:
print('Stojí, stojí mohyla.\nNa mohyle zlá chvíľa', file=file)
Ak do súboru zapisujeme len jedenkrát a hneď ho zatvárame, nemusíme na to vytvárať súborovú premennú, ale priamo pri otvorení urobíme jeden zápis. Vtedy sa súbor automaticky zatvorí.
Ukážme si kopírovanie s konštrukciou with s rovnakým výsledkom:
with open('text1.txt', 'r', encoding='utf8') as z:
zdroj = z.read()
with open('text2.txt', 'r', encoding='utf8') as z1:
zdroj1 = z1.read()
with open('text2.txt', 'w', encoding='utf8') as w:
w.write(zdroj1 + zdroj)
Pridávanie riadkov do súboru, tak aby sme nemuseli zbytočne najprv načítať riadky zo súboru do ktorého ich budeme pridávať. Ako druhý parameter ide písmeno ‚a‘ (append)
with open('text1.txt', 'r', encoding='utf8') as z:
with open('text2.txt', 'a', encoding='utf8') as w:
w.write(z.read())
Použité súbory:
One Reply to “Textové súbory”
Comments are closed.