IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

Vytvoření nového textového souboru v Pythonu - Soubory a práce s nimi v Pythonu

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 158x (998 B)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Úvod do práce se soubory v Pythonu
Všechny články v sekci
Soubory a práce s nimi v Pythonu
Přeskočit článek
(nedoporučujeme)
Uložení objektů do CSV v Pythonu
Článek pro vás napsal MQ .
Avatar
Uživatelské hodnocení:
84 hlasů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity