Výuka IT

Práce se soubory

Práce se soubory v Pythonu umožňuje ukládat a načítat data, což je klíčové pro mnoho aplikací. Soubory se používají k uchování textu, logů, konfigurací nebo dokonce binárních dat jako obrázky a zvuky.

Základy

V Pythonu se soubory otevírají pomocí funkce open(), následně se s nimi pracuje a nakonec je zvařeme funkcí close(). Zavírání souborů je extrémně důležité a v žádném případě, bychom na to neměli zapomenout. Pokud soubor nezavřeme, může to totiž způsobit problémy s pamětí a způsobit, že soubor nebude možné otevřít znovu. Tohle si můžeme představit jako ledničku, kterou po použití také necháme otevřenou. Pokud ji nezavřeme, jídlo se zkazí.

První argument funkce open() je konkrétní soubor, druhý argument určuje režim otevření. První argument může být zadaný jako relativní nebo absolutní cesta souboru. Absolutní cesta k souboru je celá cesta od kořenového adresáře (root) souborového systému až k souboru. Relativní cesta určuje umístění souboru vzhledem k aktuálnímu pracovnímu adresáři. Návratovou hodnotou je pak objekt souboru, se kterým lze dále pracovat.

soubor = open("data.txt", "r")  # Otevře soubor v režimu čtení (režim read)
print(soubor.read())  # Načte celý obsah souboru
soubor.close()  # Nezapomeň soubor zavřít!

Režimy otevření souboru

Když otevíráme soubor, můžeme určit, jak s ním chceme pracovat:

Jak číst obsah souboru?

Existují tři hlavní způsoby:

read() – načte celý soubor

soubor = open("data.txt", "r")
obsah = soubor.read()  # Načte celý soubor jako jeden řetězec
soubor.close()
print(obsah)
soubor.close()

readline() – načte jeden řádek

soubor = open("data.txt", "r")
prvni_radek = soubor.readline()  # Načte první řádek souboru
soubor.close()
print(prvni_radek)
soubor.close()

Tento způsob čtení je užitečný, pokud chceme soubor zpracovávat řádek po řádku:

file = open("data.txt", "r")
line = file.readline()
while line:
    print(line, end="")  # `end=""` zabrání přidání nového řádku, protože `line` už obsahuje znak nového řádku
    line = file.readline()   
file.close()

readlines() – načte všechny řádky do seznamu

soubor = open("data.txt", "r")
radky = soubor.readlines()  # Vrátí seznam všech řádků
soubor.close()
print(radky)
soubor.close()

Čtení souboru po řádcích pomocí for cyklu

Pokud chceme číst soubor řádek po řádku bez použití readline(), můžeme využít iterace přes objekt souboru přímo v cyklu for. Tento přístup je velmi jednoduchý a efektivní:

file = open("data.txt", "r")
for line in file:
    print(line, end="")  # `end=""` zajistí, že nebude přidán nový řádek navíc

file.close()

Jak zapisovat do souboru?

Do souboru zapisujeme pomocí funkce write(). Funkce write() zapíše pouze text (nepřidává nový řádek automaticky), takže pokud chceme, aby text skončil na novém řádku, musíme explicitně přidat znak nového řádku \n.

soubor = open("data.txt", "w")  # Otevře soubor pro zápis (smaže starý obsah!)
soubor.write("Nový text v souboru\n")
soubor.close()

Bezpečnější práce se soubory

V Pythonu existuje syntaxe s with, která po provedení bloku (práci se souborem) automaticky zavře daný soubor:

with open("data.txt", "r") as soubor:
    obsah = soubor.read()  # Po skončení bloku se soubor zavře
    print(obsah)

Procvičování

Tohle by bylo z teorie vše, a proto nastává čas si znalosti procvičit. Zde jsou pro nás připravena zadání (včetně řešení) a nakonec testovací kvíz.