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ůž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!
Když otevíráš soubor, můžeš určit, jak s ním chceš 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 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 seznamusoubor = open("data.txt", "r")
radky = soubor.readlines() # Vrátí seznam všech řádků
soubor.close()
print(radky)
soubor.close()
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()
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()
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)