ITnetwork Flashka zdarma C a C++ týden
Akce! Pouze tento týden sleva až 80 % na kurzy C++. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Lekce 3 - Práce s textovými soubory v Pythonu

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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

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 článku 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.


 

Stáhnout

Staženo 17x (998 B)
Aplikace je včetně zdrojových kódů v jazyce Python

 

 

Aktivity (4)

 

 

Komentáře

Avatar
paja
Člen
Avatar
paja:24. ledna 23:57

Ahoj , moc dekuji za pekny clanek ...
Me to na linuxu - distribuce Mint , nechodilo , tak jsem kod mirne upravil ... , mel jsem tam chybu napriklad ... **write() argument 1 must be unicode, not str #5016 ** , apod .

Posilam vypis zde, kdo bude mit zajem , co me pomohlo.

# -*- coding: utf-8 -*-
# zápis do souboru
import io
from io import open
import codecs
import sys


#zapisovani textu do souboru
with codecs.open("soubor.txt",'w', 'utf-8') as f:
 f.write("do re mi fasola si dooooo... \n")
 f.flush() # Není potřeba
print("Do souboru bylo zapsáno.")

# připsání textu do existujícího souboru
with codecs.open('soubor.txt', 'a', 'utf-8') as f:

    f.write("Pripsany radek \n")
    f.write("jeste jeden radek \n")
    f.write("to je dalsi radek  \n")
    f.flush() # Není potřeba
print("Do souboru bylo připsáno.")

# výpis obsahu souboru
print("Vypisuji soubor:")

with codecs.open("soubor.txt", "r", encoding="utf-8") as f:

    for radek in f.readlines():
        print(radek.strip()) # Odstraníme "\n"
 
Odpovědět 24. ledna 23:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.