The s klíčové slovo v Pythonu se používá jako kontextový manažer. Stejně jako v každém programovacím jazyce je použití zdrojů, jako jsou operace se soubory nebo připojení k databázi, velmi běžné. Nabídka těchto zdrojů je však omezená. Hlavní problém tedy spočívá v zajištění uvolnění těchto prostředků po použití. Pokud nejsou uvolněny, povede to k úniku zdrojů a může způsobit zpomalení nebo zhroucení systému.
Jak víme, funkce open() se obecně používá pro práci se soubory v Pythonu. Je však standardní praxí používat ke zpracování souborů kontextové manažery jako u klíčových slov, protože po dokončení použití soubory automaticky uvolní.
Python se syntaxí open():
Syntax:
s open(file_path, mode, encoding) jako soubor:
…
cesta k souboru: Je to cesta k souboru, který se má otevřít
režim: režim provozu na souboru. např.: číst, psát atd. (reprezentováno r, w, r+, w+, rb, wb atd.)
kódování: číst soubor ve správném formátu kódování.
Příklad 1: Jednoduchý příklad s použitím příkazu with
Již máme název souboru geeksforgeeks.txt v našem systému a obsahuje následující údaje:

geeksforgeeks,txt
Nyní otevřeme soubor a načteme obsah souboru pomocí příkazu s open():
Python3
xor cpp
with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > file_content> => gfg_file.read()> > print> (file_content)> |
>
>
Výstup:
GeeksForGeeks is best for DSA>
Poznámka: Zde jsme použili režim jako r číst data, protože cílový soubor obsahuje textová data. V případě, že čteme nějaký binární soubor, musíme použít rb jako režim.
Příklad 2: Můžeme také použít s příkaz k připojení nebo zápisu dat do souboru.
Řetězec připojíme Ahoj geekové! do našeho souboru geeksforgeeks.txt.
Python3
java řetězec cmp
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > # reading the file contents> # to verify if successfully appended the data> with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > content> => gfg_file.read()> > print> (content)> |
>
>
Výstup:
GeeksForGeeks is best for DSA Hello Geeks!>
Poznámka: Zde jsme použili A jako režim otevírání souboru je to proto, že chceme připojit k souboru data. Místo toho, pokud bychom chtěli přepsat data souboru, použili bychom v režimu.
Příklad 3: Použití vnořeného příkazu open k otevření více souborů

links.txt
Definovali jsme a links.txt soubor obsahující nějaké náhodné odkazy. Otevřeme geeksforgeeks.txt výše zmíněný soubor a připojte obsah souboru odkazů do souboru geeksforgeeks.txt soubor.
Python3
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > with> open> (> 'links.txt'> ,> 'r'> ) as links_file:> > lines> => links_file.readlines()> > gfg_file.writelines(lines)> |
>
>
geeksforgeeks.txt obsah souboru po úpravě:

geeksforgeeks,txt
Zde můžeme vidět, že obsah links.txt soubor byl přidán do souboru geeksforgeeks.txt soubor po spuštění skriptu.
Rozdíl v použití open() a open()
I když funkce použití OTEVŘENO() a s OTEVŘENO() je úplně stejný, ale jsou zde některé důležité rozdíly:
- Pomocí open() můžeme použít obslužný program souboru, pokud soubor nebyl explicitně uzavřen pomocí file_handler.close() , ale v případě použití s kontextovým manažerem open() nemůžeme použít obsluhu souboru mimo blok with. Zvedne se ValueError: I/O operace na uzavřeném souboru v tom případě.
- Při použití open() musíme explicitně zavřít instanci otevřeného souboru, jinak se mohou při otevírání stejného souboru vyskytnout chyby v jiných částech kódu. V případě open() je uzavření souboru řešeno kontextovým manažerem.
- Použití s kontextovým příkazem open() dělá kód přehlednějším, protože můžeme snadno oddělit kód bloky rozdílem v odsazení. V případě open() můžeme vynechat uzavření instance souboru, což může způsobit úniky paměti a další chyby I/O operace.