Jak otworzyć plik za pomocą instrukcji with
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
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
# 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.