The z słowo kluczowe w Pythonie służy jako menedżer kontekstu. Jak w każdym języku programowania, bardzo powszechne jest wykorzystanie zasobów, takich jak operacje na plikach lub połączenia z bazami danych. Jednak podaż tych zasobów jest ograniczona. Dlatego główny problem polega na konieczności zwolnienia tych zasobów po ich użyciu. Jeśli nie zostaną one zwolnione, doprowadzi to do wycieku zasobów i może spowodować spowolnienie lub awarię systemu.
Jak wiemy, funkcja open() jest powszechnie używana do obsługi plików w Pythonie. Jednak standardową praktyką jest używanie menedżerów kontekstu, takich jak słowa kluczowe, do obsługi plików, ponieważ automatycznie zwalniają one pliki po zakończeniu ich użycia.
Python ze składnią open():
Składnia:
z open(ścieżka_pliku, tryb, kodowanie) jako plik:
…
ścieżka pliku: Jest to ścieżka do pliku do otwarcia
tryb: tryb działania na pliku. np.: czytać, pisać itp. (reprezentowane przez r, w, r+, w+, rb, wb itp.)
kodowanie: odczytaj plik w odpowiednim formacie kodowania.
Przykład 1: Prosty przykład użycia instrukcji with
Mamy już nazwę pliku geeksforgeeks.txt w naszym systemie i zawiera następujące dane:

geeksforgeeks, txt
Teraz otworzymy plik i odczytamy zawartość pliku za pomocą instrukcji open():
Python3
różnica dat w Excelu
with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >file_content>=> gfg_file.read()> >print>(file_content)> |
>
>
Wyjście:
GeeksForGeeks is best for DSA>
Notatka: Tutaj użyliśmy trybu as R odczytać dane, ponieważ plik docelowy zawiera dane tekstowe. W przypadku, gdy czytamy jakiś plik binarny, musimy użyć rb jako tryb.
Przykład 2: Możemy także skorzystać z z instrukcja dołączenia lub zapisania danych do pliku.
Dołączymy ciąg Witajcie maniacy! do naszego pliku geeksforgeeks.txt.
Python3
c programy
# 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)> |
>
>
Wyjście:
GeeksForGeeks is best for DSA Hello Geeks!>
Notatka: Tutaj użyliśmy A jako sposób otwierania pliku, dzieje się tak dlatego, że chcemy dołączyć do pliku dane. Zamiast tego, gdybyśmy chcieli nadpisać dane pliku, użylibyśmy w tryb.
Przykład 3: Użycie instrukcji zagnieżdżonej z instrukcją open do otwarcia wielu plików

linki.txt
Zdefiniowaliśmy A linki.txt plik zawierający losowe linki. Otworzymy geeksforgeeks.txt plik wspomniany powyżej i dołącz zawartość pliku linków do pliku geeksforgeeks.txt plik.
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 zawartość pliku po modyfikacji:

geeksforgeeks, txt
Tutaj widzimy, że zawartość pliku linki.txt plik został dodany do geeksforgeeks.txt plik po uruchomieniu skryptu.
Różnica w użyciu open() i open()
Chociaż funkcja używania otwarty() I z otwarty() jest dokładnie taki sam, ale są pewne istotne różnice:
- Używając open() możemy użyć procedury obsługi pliku, o ile plik nie został jawnie zamknięty za pomocą obsługa_pliku.close() , ale w przypadku użycia z menedżerem kontekstu open() nie możemy użyć procedury obsługi plików poza blokiem with. Podniesie ValueError: operacja we/wy na zamkniętym pliku w tym wypadku.
- Używając metody open() musimy jawnie zamknąć instancję otwartego pliku, w przeciwnym razie inne części kodu mogą napotkać błędy podczas otwierania tego samego pliku. W przypadku metody open() zamknięcie pliku jest obsługiwane przez menedżera kontekstu.
- Użycie instrukcji kontekstowej open() sprawia, że kod jest bardziej uporządkowany, ponieważ możemy łatwo oddzielić bloki kodu na podstawie różnicy wcięć. W przypadku open() możemy przegapić zamknięcie instancji pliku, co może spowodować wycieki pamięci i inne błędy operacji we/wy.