Jak wykonywać operacje wejściowe/wyjściowe Python na plikach z funkcją Open Python

Jak wykonywać operacje wejściowe/wyjściowe Python na plikach z funkcją Open Python

Manipulacja plików to operacja, która wcześniej czy później będziemy musieli wykonać w naszych programach. Wbudowany Python otwarty Funkcja zwraca a Obiekt pliku, który pozwala nam interakcja z plikami w różnych trybach: zobaczymy je w tym artykule.

W tym samouczku Pythona dowiesz się:

  • Jak korzystać z funkcji Open Python.
  • Jakie są różne tryby działania, które można użyć z funkcją Python Open.
  • Jak wchodzić w interakcje z obiektem pliku.
  • Dlaczego ważne jest zamknięcie obiektu pliku i jak to zrobić.

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od OS
Oprogramowanie Python3
Inny Nie wymaga specjalnych uprawnień.
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny
>>> - Python poleca, które należy wykonać w interaktywnej powładzie

Instrukcje wejściowe i wyjściowe Pythona

Istnieje wiele powodów, dla których program może wymagać interakcji z plikami: czytanie konfiguracji i ustawień, które wpłyną na zachowanie samego programu, a może przetrwać dane. W tym samouczku zobaczymy, jak wykonać takie zadania, używając funkcji otwartej Python i interakcji z Obiekty pliku.



Funkcja otwartego Pythona

Przed rozpoczęciem czytania lub pisania plików musimy dowiedzieć się, w jaki sposób możemy uzyskać do nich dostęp. Funkcja otwartego Pythona otwiera plik i zwraca Obiekt pliku, podniesienie Oserror Wyjątek, jeśli nie można uzyskać dostępu do zasobu. Ta funkcja ma tylko jeden obowiązkowy argument, plik, który jest ciągiem lub obojerkiem bajtowym reprezentującym ścieżkę pliku do otwarcia:

>>> fobject = Open ('LinuxConfig.tekst') 
Kopiuj

Tryb odczytu - „R”

Otworzyliśmy Linuxconfig.tekst plik, a wynikowy obiekt plików jest teraz odwoływany Fobject. To jest Python plik-obiekt który wdraża metody takie jak pisać I Czytać. Co jeśli Linuxconfig.tekst Plik nie istniał? A FillenotFoundError Wyjątek zostałby podniesiony:

>>> fobject = Open ('LinuxConfig.txt ') traceback (najnowsze połączenie ostatnie): plik „”, wiersz 1, w  FillenotFoundError: [errno 2] Brak takiego pliku lub katalogu: „LinuxConfig.tekst' 
Kopiuj

Jak właśnie powiedzieliśmy powyżej, jedynym obowiązkowym argumentem funkcji otwartej Pythona jest plik. Gdy jest używana jak w powyższym przykładzie, funkcja działa w tryb tekstowy a plik jest otwarty tylko do odczytu. Rażony odpowiednik tego, co zrobiliśmy powyżej, to:

>>> fobject = Open ('LinuxConfig.txt ', „rt”) 
Kopiuj

Drugim argumentem funkcji jest tryb. W tym przypadku, „rt”, gdzie 'R' oznacza Czytać i 'T' Określa, że ​​działamy w trybie tekstowym. Możliwe jest również otwarcie plików w trybie binarnym, zastępując 'T' z 'B': W tym przypadku treść bajtów, bez żadnego kodowania zostanie zwrócona. Od 'T' to tryb domyślny, odtąd go pominiemy. Aby odczytać zawartość pliku, możemy na przykład użyć Czytać metoda. Zwraca całą zawartość pliku jako ciąg:

>>> Fobject.Read () „Linuxconfig jest niesamowity!\N' 
Kopiuj

Kiedy działają w trybie odczytu, każda próba zapisywania pliku podniesie io.Nie wspierana wyjątek:

>>> Fobject.Write („Linuxconfig jest niesamowity!') Traceback (najnowsze połączenie ostatnie): plik „”, wiersz 1, w  io.Unsupportedoperation: nie jest to zapisane 
Kopiuj

Oczywiście nie jest to jedyny dostępny tryb. Zobaczmy innych.

Tryb zapisu - „W”

Podczas określania „W” jako wartość tryb argument otwarty funkcja, jeśli plik istnieje, jest pierwsza kadłubowy (cała jego treść jest odrzucana), a następnie jest otwarta do pisania; Jeśli plik nie istnieje, jest tworzony. W takim przypadku używamy pisać Metoda obiektu pliku:

>>> fobject = Open ('LinuxConfig.txt ', „w”) >>> fobject.Napisz („Właśnie napisaliśmy do pliku!') 26 >>> Fobject.zamknąć() 
Kopiuj

Otworzyliśmy plik do pisania, niż użyliśmy pisać Metoda obiektu pliku, który zapisuje ciąg i zwraca liczbę napisanych znaków, 26 W tym przypadku w końcu użyliśmy zamknąć Metoda zamykania obiektu: Ten krok jest naprawdę ważny, ponieważ operacja zapisu staje się skuteczna dopiero po wypłukaniu treści pliku (zobaczymy znaczenie zamykania obiektu pliku na końcu samouczka). Jeśli teraz zbadamy treść pliku, zobaczymy, że jego poprzednia treść została zastąpiona i zawiera tylko ciąg:

„Właśnie napisaliśmy do pliku!'

Jak to się stało powyżej, jeśli spróbujemy wykonać operację niedozwoloną przez tryb działania, wyjątek jest podniesiony. W takim przypadku, jeśli spróbujemy odczytać zawartość pliku, otrzymujemy następujący wynik:

>>> fobject = Open ('LinuxConfig.txt ', „w”) >>> fobject.Read () Traceback (najnowsze połączenie ostatnie): plik „”, wiersz 1, w IO.Unsupportedoperation: Niezależna 
Kopiuj

Dołączenie do pliku: tryb „A”

Co jeśli chcemy dołączyć do pliku, zachowując jego bieżącą zawartość? Musimy użyć 'A' (Dodatek) Tryb. Gdy ten tryb jest używany, jeśli plik istnieje, jest otwarty do pisania, a strumień jest ustawiony na końcu. W ten sposób poprzednia treść pliku zostanie zachowana. Jeśli plik nie istnieje, został utworzony:

>>> fobject = Open ('LinuxConfig.txt ', „a') >>> fobject.Write („Dodany tekst!') 14 >>> Fobject.zamknąć() 
Kopiuj

Otworzyliśmy plik w 'A' tryb i zapisz ciąg „dołączony tekst” do pliku. Poprzednia treść nie została obcięta:

Linuxconfig jest niesamowity! Dołączony tekst! 

Tryb „X” - Wyłączne stworzenie

Ten tryb otwarcia jest dostępny tylko w Python3. Kiedy jest używany, a FileExistSerror jest podniesiony, jeśli plik już istnieje. Jeśli plik nie istnieje, jest tworzony i otwierany do pisania:

FileObject = Open ('LinuxConfig.txt ', „x”) traceback (najnowsze połączenie ostatnie): plik „”, wiersz 1, in, in, w  FileExistSSerror: [errno 17] Plik istnieje: „Linuxconfig.tekst' 
Kopiuj

Za każdym razem, gdy coś piszemy, jest to dołączane do poprzedniej zawartości, dopóki nie zamkniemy obiektu pliku:

>>> FileObject = Open ('LinuxConfig1.txt ', „x') >>> fileObject.Write ('LinuxConfig jest ponownie niesamowity \ n') >>> FileObject.Write („Powtarzam: Linuxconfig jest niesamowity!\ n ') >>> FileObject.zamknąć() 
Kopiuj

Po uruchomieniu powyższego kodu nowa zawartość pliku będzie:

Linuxconfig jest niesamowity! Powtarzam: Linuxconfig jest niesamowity! 

Postać „+”

Widzieliśmy podstawowe tryby, które można użyć z otwarty Funkcja i jak działają. Dołączając „+” Charakter dla każdego z nich, możemy uzyskać nowe zachowania.

Tryb „R+”

Podczas dołączania znaku „+” do trybu „R” („R+”) plik jest otwarty zarówno do czytania, jak i pisania; Wyjątek jest podniesiony, jeśli plik nie istnieje. Strumień jest ustawiony na początku pliku, więc jeśli coś zostanie napisane, zastąpi poprzednią treść. Jeśli jesteśmy w tym trybie, ale nadal chcemy dołączyć nową treść, rezerwując istnienie, musimy zmienić bieżącą pozycję za pomocą szukać Metoda obiektu pliku przed napisaniem, w następujący sposób:

>>> FileObject = Open ('LinuxConfig.txt ', „r+”): >>> fileObject.szukaj (0,2) >>> FileObject.zapisz („ten tekst zostanie dołączony”) >>> FileObject.zamknąć() 
Kopiuj

szukać Metoda przyjmuje dwa argumenty: Pierwszy to zrównoważyć, druga to pozycja, z której należy obliczyć przesunięcie, gdzie 0 (Domyślnie, jeśli ten argument został pominięty) to początek pliku, 1 jest aktualnym przesunięciem i 2 to koniec pliku. W takim przypadku użyliśmy przesunięcia 0 od końca pliku, a zatem przechodząc do końca samego pliku. Zwróć uwagę, że w tym przypadku określenie niezerowego przesunięcia, podniosłoby io.Nie wspierana wyjątek, ponieważ niemożliwe jest wykonanie niezerowej, końcowej poszukiwania.

Tryb „w+”

Ten tryb działa w ten sposób: plik zostanie otwarty zarówno do czytania, jak i pisania. Jeśli plik istnieje, jego treść zostanie obcięta, w przeciwnym razie plik zostanie utworzony. Podobnie jak w poprzednim przykładzie, możliwe będzie odczytanie i zapisanie pliku, jednak istnieją dwie duże różnice: pierwsze jest to, że zawartość pliku zostanie obcięta, gdy tylko zostanie otwarta (a nie, jeśli aktywujesz coś, napisz coś do to) po drugie, że plik zostanie utworzony, jeśli nie istnieje.



Tryb „A+”

Podczas określenia tego trybu za pomocą funkcji Open Python otrzymujemy następujące zachowanie: Podobnie jak w poprzednich przykładach plik jest otwarty zarówno do odczytu, jak i do pisania, strumień jest ustawiony na końcu pliku, więc każda nowa treść, którą jest dołączona do istniejącego.

Należy zauważyć dwie rzeczy: ponieważ strumień jest ustawiony na końcu pliku, jeśli spróbujemy użyć Czytać Metoda w obiekcie pliku, aby uzyskać bieżącą zawartość, zwróci pusty ciąg. Aby móc odczytać treść, powinniśmy najpierw przejść na początek pliku, używając metody Seek w następujący sposób:

FileObject.szukaj (0)
Kopiuj

Drugą, bardzo ważną rzeczą do zauważenia, jest to, że podczas korzystania z tego trybu, nawet jeśli przejdziemy na początek pliku, tak jak to zrobiliśmy w powyższym przykładzie, i wykonujemy zapis, istniejąca treść, której nie jest utracone: nowa treść jest zawsze dołączany.

Zamknięcie obiektu pliku

Po zakończeniu pracy z naszym obiektem pliku musimy zawsze pamiętać o jego zamknięciu z wielu powodów. W Primis, ponieważ niektóre operacje, takie jak pisanie, stają się skuteczne tylko wtedy, gdy obiekt pliku jest zamknięty, a jego treść jest spłukiwana, po drugie do bezpłatnych zasobów systemowych i jasności kodu. Istnieją dwa sposoby zamknięcia obiektu pliku: pierwszy to wywołanie zamknąć metoda w obiekcie pliku, jak widzieliśmy powyżej. Drugi, jest używanie z oświadczenie:

z otwartym („Linuxconfig.txt ', „r”) jako fileObject: content = fileObject.czytaj () # wykonaj potrzebne operacje 
Kopiuj

Co się stanie w tym przypadku? Korzystając z tego stwierdzenia, wyrażenie obok z, w tym przypadku Otwórz („Linuxconfig.txt ', „r”), jest oceniany na obiekt pliku, który obsługuje protokół menedżera kontekstowego, ponieważ implementuje __Wchodzić__ I __Wyjście__ metody. Obiekt pliku jest następnie aliasowany FileObject. Po wykonaniu kodu zawartego w bloku, __Wyjście__ Metoda obiektu pliku jest wywoływana automatycznie, a obiekt pliku jest zamknięty. Korzystanie z menedżera kontekstowego jest naprawdę przydatne, ponieważ obiekt będzie zawsze zamknięty, gdy tylko skończymy działać: jedna rzecz do zapamiętania.

Wnioski

W tym samouczku nauczyliśmy się, jak korzystać z wbudowanego Pythona otwarty funkcja do utworzenia obiektu pliku, używanego do interakcji z plikiem. Widzieliśmy różne tryby, które można przekazać do funkcji i jak zmieniają zachowanie obiektu pliku. Na koniec widzieliśmy, dlaczego ważne jest, aby zawsze zamykać obiekt pliku po zakończeniu pracy z nim, jak możemy to zrobić za pomocą zamknąć metoda i sposób, w jaki można to zrobić automatycznie, jeśli używamy z oświadczenie i menedżer kontekstowy. Jak zawsze sugerowano, możesz skonsultować się z oficjalną dokumentacją w celu dalszej poprawy swojej wiedzy.

Zobacz także nasz bardziej obszerny samouczek Python, aby uzyskać więcej koncepcji związanych z Pythonem lub nasze pliki do czytania i pisania z Python Guide.

Powiązane samouczki Linux:

  • Obsługa danych wejściowych użytkownika w skryptach Bash
  • Mastering Bash Script Loops
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze
  • Big Data Manipulacja dla zabawy i zysku Część 1
  • Manipulacja Big Data dla zabawy i zysku Część 3
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Manipulacja Big Data dla zabawy i zysku Część 2
  • Jak montować obraz ISO na Linux