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ůžeš představit jako ledničku, kterou po použití také necháš otevřenou. Pokud ji nezavřeš, 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áš soubor, můžeš určit, jak s ním chceš 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 chceš 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 chceš číst soubor řádek po řádku bez použití readline(), můžeš 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 chceš, aby text skončil na novém řádku, musíš 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)