Lekce 3 - Práce s textovými soubory v Pythonu
V minulé lekci, Úvod do práce se soubory v Pythonu, jsme si ukázali, jak fungují přístupová práva v systémech Windows.
Nejjednodušší cestou, jak uložit data aplikace na pevný disk, je využít textové soubory. Se soubory s příponou .txt jste se jistě všichni již setkali. Text je v nich uložen jednoduše na jednotlivých řádcích. K oddělení řádků se využívá speciálních znaků, které jsou bohužel specifické pro každý operační systém.
Zápis textu do nového souboru
Nejprve si pojďme vytvořit nový textový soubor a něco do něj zapsat.
Vytvořte si nový "projekt" s názvem main.py
. K zapisování do
textových souborů nám poslouží funkce open()
, kterou jsme si
již zmínili minule. Soubor pomocí ní můžeme otevřít v následujících 3
módech:
"w"
- zápis (vytvoření nového souboru nebo přepsání existujícího)"r"
- čtení"a"
- připisování do souboru
Nejprve vytvořme blok with
a založme v něm nový file handler
pro zápis pomocí funkce open()
. Jak již víme z předchozích
lekcí, with
se nám automaticky postará o zavření souboru po
dokončení zápisu/čtení (bez bloku with
by se o to postaral až
garbage collector, který smaže file handler a až při smazání se do souboru
zapíše). Do parametrů funkce napíšeme cestu k našemu souboru, mód a
kódování. Protože chceme soubor vytvořit, mód bude "w"
(zápis):
with open("soubor.txt", "w", encoding="utf-8") as f: pass
Náš file handler je nyní nasměrovaný na správný soubor. Nový řádek
zapíšeme pomocí metody write()
.
Kód se nám tedy rozrostl a může vypadat např. 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 spuštění se vytvoří soubor.txt
ve složce s naším
programem. Jak se
správně v Pythonu vypořádat s cestou k souboru a právy jsme si již
ukazovali a zde to pro jednoduchost zanedbáme. Vidíme, že soubor existuje a
opravdu obsahuje náš text:

Po dokončení zápisu Python automaticky zavolá metodu
flush()
, která se stará o vyprázdnění bufferu. S tím se zde
nebudeme zatěžovat, postačí nám vědět, že námi zapsané řádky mohou
zůstat chvíli ve vyrovnávací paměti. Pokud byste z nějakého důvodu
potřebovali vynutit během zápisu okamžité zapsání dat do souboru,
můžete flush()
na file handleru zavolat i ručně.
Připsání textu do existujícího souboru
Pokud soubor neexistuje, kód výše ho vytvoří. Pokud existuje,
bude přepsán. Toto chování můžeme změnit pomocí 2. parametru
funkce open()
. Pokud ho nastavíme na "a"
, provede se
tzv. append (připsání). Takto do existujícího souboru připíšeme nový
řádek:
with open("soubor.txt", "a", encoding="utf-8") as f: f.write("Připsaný řádek")
Čtení existujícího souboru
Zbývá nám již jen umět soubor načíst. Není to o nic složitější,
než zápis. Použití je obdobné, namísto metody write()
použijeme na file handleru readlines()
, která vrací všechny
řádky textu ze souboru. Jednotlivé řádky vypíšeme ve for
cyklu. Kód k výpisu obsahu souboru do konzole by vypadal 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 našeho programu vypadá nyní 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ýsledek:
Konzolová aplikace
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 lekci jsme opomenuli odchytávání výjimek a kontrolu práv. Do souborů také budeme chtít většinou ukládat spíše objekty, než řádky textu. To vše si ukážeme v příští lekci, Uložení objektů do CSV v Pythonu.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 172x (998 B)
Aplikace je včetně zdrojových kódů v jazyce Python