logo

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

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

Jak otworzyć plik za pomocą instrukcji with

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:

Jak otworzyć plik za pomocą instrukcji with

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.