Python • kurs podstawowy • lekcja 24
Pliki tekstowe i pathlib
Zmienne znikają po zakończeniu programu; plik pozwala zachować dane.
Twój cel: Zapiszesz i odczytasz tekst w UTF-8, rozróżniając nadpisanie i dopisanie.Napisy i funkcje; import wyjaśniono poniżej.
Od potrzeby do kodu
pathlib to moduł biblioteki standardowej, a from pathlib import Path udostępnia nazwę Path. Obiekt Path opisuje ścieżkę. Samo jego utworzenie nie tworzy pliku.
Ścieżka względna, np. notes.txt, jest liczona względem bieżącego katalogu roboczego, nie zawsze folderu pliku .py. Uruchamiaj ćwiczenia w osobnym folderze do nauki. write_text tworzy plik albo zastępuje całą jego zawartość. read_text odczytuje całość. encoding="utf-8" określa sposób zapisu znaków, w tym polskich liter.
Znak \n w napisie oznacza nową linię. with open(..., "a", ...) as file otwiera plik do dopisywania i zamyka go przy opuszczeniu bloku. Tryb "w" nadpisuje, "a" dopisuje, a domyślny "r" czyta. Nie testuj nadpisywania na ważnych dokumentach.
Przewidź przed uruchomieniem
from pathlib import Path
path = Path("notes.txt")
path.write_text("Żółw\n", encoding="utf-8")
with open(path, "a", encoding="utf-8") as file:
file.write("Lis\n")
text = path.read_text(encoding="utf-8")
print(text, end="")
Porównaj wynik i prześledź mechanizm
Plik zawiera Żółw i Lis w dwóch liniach. Tryb a dopisuje Lis. Po zamianie na w drugie otwarcie usunie wcześniejszy tekst i pozostanie tylko Lis. end="" zapobiega dodatkowej nowej linii od print.
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
Żółw
Lis
| Operacja | Zawartość notes.txt |
|---|---|
| write_text | Żółw + koniec linii |
| open w trybie a i write | Żółw, potem Lis |
| read_text | Odczyt bez zmiany pliku |
Zmień działający program
Po wykonaniu przykładu dopisz trzecią linię Kot i odczytaj całość. Poniższa samodzielna wersja odtwarza dane początkowe.
Pierwsza wskazówka
Zachowaj działający punkt wyjścia. Zlokalizuj konstrukcję wskazaną w poleceniu i zmień tylko ten etap. Przed uruchomieniem zapisz oczekiwany efekt.
Porównaj swoją modyfikację
from pathlib import Path
path = Path("notes.txt")
path.write_text("Żółw\nLis\n", encoding="utf-8")
with open(path, "a", encoding="utf-8") as file:
file.write("Kot\n")
print(path.read_text(encoding="utf-8"), end="")
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
Żółw
Lis
Kot
Znajdź przyczynę problemu
Celowo błędny przykład diagnostyczny. Najpierw postaw hipotezę. Nie kopiuj tej wersji jako poprawnego rozwiązania.
Zamierzone działanie: Znajdź plik zapisany przez program.
Program zapisany w folderze A uruchamiasz z folderu B. Szukasz notes.txt w A, lecz go tam nie ma.
Trop do diagnozy
Porównaj zamierzony rezultat z typami, nazwami i kolejnością instrukcji. Wskaż pierwsze miejsce, w którym zachowanie odbiega od celu.
Zastosuj w nowej sytuacji
Wskazówka do rozpoczęcia
Ścieżka wskazuje miejsce, tryb określa operację. Ponowne write_text resetuje zawartość.
Zacznij od przygotowania danych. Pierwsza instrukcja przykładowego rozwiązania:
from pathlib import Path
Rozwiązanie do samodzielnej kontroli
from pathlib import Path
path = Path("plan.txt")
path.write_text("Czytanie\n", encoding="utf-8")
with open(path, "a", encoding="utf-8") as file:
file.write("Spacer\n")
print(path.read_text(encoding="utf-8"), end="")
Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:
Czytanie
Spacer
Porównaj dane wejściowe, wynik i powód użycia konstrukcji. Inna wersja kodu jest poprawna, jeśli realizuje te same wymagania.
Co zabierasz do kolejnego programu?
Ścieżka wskazuje miejsce, tryb określa operację. Ponowne write_text resetuje zawartość.
Bez zaglądania do przykładu wyjaśnij własnymi słowami, jak główna konstrukcja prowadzi od danych do wyniku. Potem sprawdź wyjaśnienie, uruchamiając swój program.