Tryb dostępu i zapis do pliku

W poprzedniej lekcji wspomnieliśmy o trybach dostępu. Co się kryje pod tym pojęciem?

Czym jest tryb dostępu?

Mówiąc najprościej to trochę jak z dokumentami współdzielonymi. Możesz komuś udostępnić dokument tylko do odczytu z kolei inni mogą dostać pełne prawa do edycji. Podyktowane jest to faktem zabezpieczenia przed niekontrolowaną edycją. W Pythonie istnieje podobny mechanizm.

Tryby dostępu (ang. Access Modes) określają sposób i typ operacji jakie będą wykonywane na otwartym pliku. Dzięki trybom możemy otworzyć plik jedynie z prawami do odczytu, aby przypadkiem nie nadpisać swoich danych.

Już skorzystaliśmy z jednego trybu dostępu. Jest to tryb domyślny więc nie musimy go definiować przy pracy z plikami – po prostu został on już ustawiany.

Funkcja open() domyślnie otwiera pliki w trybie tylko do odczytu. Przy wywołaniu metody write() chcieliśmy dokonać coś co jest niezgodne z trybem tylko do odczytu więc pojawił się wyjątek. Ok, to jeśli wiemy, że domyślny tryb nie pozwala na zapis do pliku, to jak ten tryb zmienić?

Zmiana domyślnego trybu dostępu

Zmiana trybu dostępu jest banalnie prosta 😉 Wystarczy wstawić w funkcji open() dodatkowy parametr. Można to zrobić jak w przykładach poniżej:

file = open("./testFiles/fileToWrite.txt", mode='w')

Lub:

file = open("./testFiles/fileToWrite.txt", 'w')

Obie konstrukcje reprezentują tą samą akcję.

Litera w oznacza tryb zapisu do pliku. W tym trybie należy pamiętać o dwóch rzeczach:

  • gdy plik nie istnieje – to zostanie on stworzony,
  • zawartość pliku jest za każdym razem nadpisywana.

Testujemy tryb write (w)

Zróbmy więc zmianę w naszym kodzie i użyjmy tryby write poprzez dodanie mode='w':

file = open("./testFiles/fileToWrite.txt", mode='w')
file.write('Hello jaktestowac.pl!')
file.close()
TIP: Stosujemy tu rozwiniętą konstrukcję podawania trybu mode='w':

file = open("./testFiles/fileToWrite.txt", mode='w')

gdy już nabierzesz wprawy i będziesz dobrze orientował się w trybach możesz korzystać ze skrótowej wersji w

file = open("./testFiles/fileToWrite.txt", 'w')

Uruchom skrypt write_file.py i zobacz, że na konsoli otrzymaliśmy pozytywny wynik:

Process finished with exit code 0

Zajrzyj do pliku fileToWrite i powinieneś znaleźć tam nasz tekst ze skryptu🙌

To był zwykły zapis ale mamy jeszcze dwie własności trybu write

Testujemy tryb write (w) – nadpisanie pliku

Dobrze testować różne działania w warunkach kontrolowanych 😀 Dlatego teraz przetestujemy efekty ponownego uruchomienia naszego skryptu do tworzenia pliku 😉

Na początku otwórz plik fileToWrite.txt i wyedytuj jego zawartość. Wprowadź tam np.:

Hello World!

Zapisz zmiany w fileToWrite.txt, a następnie uruchom jeszcze raz skrypt write_file.py. Jaki będzie rezultat? W konsoli efekt powinien być taki sam jak poprzednio, czyli:

Process finished with exit code 0

Natomiast jeśli otworzysz plik fileToWrite.txt, to jego zawartość będzie przedstawiała się w następujący sposób:

Hello jaktestowac.pl!

Teraz doświadczalnie przekonaliśmy się o tym, że zawartość pliku fileToWrite.txt jest nadpisywana. Dzieje się tak w przypadku wykorzystania trybu dostępu mode='w'. Bardzo ważne jest, abyś o tym pamiętał. Złe ustawienie trybu dostępu może spowodować różnego typu błędy i utratę efektów swojej pracy. Dlatego zawsze zwracaj dużą uwagę na ustawiony tryb 😉

Testujemy tryb write (w) – utworzenie pliku

Pozostaje kolejna własność – utworzenie pliku. W sumie my już go mamy więc, trzeba się go pozbyć 😈

Usuń plik fileToWrite.txt klikając prawym klawiszem myszki na jego nazwę i wybierając opcję Delete. W oknie które się pojawi możesz odznaczyć wszystkie opcje i kliknąć OK.

Dodatkowo usuńmy linię z naszego kodu gdzie wpisujemy tekst:

file.write('Hello jaktestowac.pl!')

Czyli cały skrypt będzie wyglądał tak:

file = open("./testFiles/fileToWrite.txt", mode='w')
file.close()

Po tej zmianie pozostaje ponownie uruchomić skrypt i obserwować konsolę, na której powinno się pojawić jedynie:

Process finished with exit code 0

Niezbyt imponujący wynik, ale oznacza to, że działanie skryptu zakończyło się sukcesem. Pozostaje nam teraz zweryfikować czy wystąpiły oczekiwane rezultaty 😉

Plik fileToWrite.txt powinien pojawić się w katalogu testFiles:

C:\
+-- Projects
|   +-- pythonFiles
|       +-- testFiles
|           +-- fileToRead.txt
|           +-- fileToWrite.txt
|       +-- venv
|       +-- read_file.py
|       +-- write_file.py

Czyli plik fileToWrite.txt został stworzony. Po jego otwarciu widzimy, że jest pusty.

Jeśli teraz ponownie dodamy linię:

file.write('Hello jaktestowac.pl!')

…i uruchomimy ponownie skrypt, to po otwarciu pliku fileToWrite.txt powinieneś zobaczyć następującą zawartość:

Hello jaktestowac.pl!

W tym momencie jesteśmy pewni, że mamy skrypt, który tworzy nam plik o zdefiniowanej przez nas zawartości 🙂

TIP: Poza tymi dwoma trybami dostępu (czyli domyślny tryb odczytu i tryb zapisu w) istnieje jeszcze kilka innych (jak na przykład wyjątkowo pomocny tryb dopisywania zawartości do pliku), ale o nich opowiemy w kolejnych lekcjach 😉

O trybach dostępu wspomnimy jeszcze wiele razy w kolejnych lekcjach 😉 Również opiszemy wiele możliwych trybów i kombinacji. Wcześniej jednakże zaprezentujemy bardzo przydatną instrukcję with

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *