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.
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!
Když otevíráme soubor, můžeme určit, jak s ním chceme pracovat:
"r" – čtení (výchozí)"w" – zápis (přepíše existující obsah, pokud soubor neexistuje vytvoří se)"a" – přidání textu na konec souboru"x" – vytvoří nový soubor (chyba, pokud už existuje)Existují tři hlavní způsoby:
read() – načte celý souborsoubor = 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 řádeksoubor = 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 seznamusoubor = open("data.txt", "r")
radky = soubor.readlines() # Vrátí seznam všech řádků
soubor.close()
print(radky)
soubor.close()
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()
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()
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)
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.