Kurs: Darmowy kurs Python dla początkujących
Lekcja 10: Praca z plikami
Otwieranie, czytanie i zapisywanie plików
W Pythonie możesz łatwo pracować z plikami tekstowymi dzięki wbudowanym funkcjom. Możesz otwierać, czytać, zapisywać i modyfikować pliki. Operacje te są szczególnie przydatne przy przetwarzaniu danych, zapisywaniu wyników programu lub tworzeniu logów.
1. Otwieranie plików
Aby otworzyć plik w Pythonie, używamy funkcji open()
. Przyjmuje ona dwa główne argumenty:
- Ścieżkę do pliku.
- Tryb otwierania pliku (np.
"r"
– odczyt,"w"
– zapis,"a"
– dopisywanie).
# Otwieranie pliku w trybie odczytu plik = open("przykladowy_plik.txt", "r") print(plik.read()) # Odczyt całej zawartości pliku plik.close()
Najczęściej używane tryby otwierania plików:
"r"
– Tryb odczytu (domyślny). Plik musi istnieć."w"
– Tryb zapisu. Tworzy nowy plik lub nadpisuje istniejący."a"
– Tryb dopisywania. Dodaje zawartość na końcu pliku, jeśli istnieje."rb"
,"wb"
– Tryby dla plików binarnych (np. obrazy).
2. Czytanie zawartości plików
Python oferuje różne metody do odczytu zawartości plików:
read()
– Czyta całą zawartość pliku.readline()
– Czyta pojedynczą linię.readlines()
– Zwraca listę, gdzie każda linia jest osobnym elementem.
# Przykłady odczytu pliku plik = open("przykladowy_plik.txt", "r") # Czytanie całej zawartości print(plik.read()) # Powrót na początek pliku i czytanie linia po linii plik.seek(0) # Resetuje wskaźnik na początek pliku print(plik.readline()) # Pierwsza linia print(plik.readline()) # Druga linia # Czytanie wszystkich linii jako lista plik.seek(0) print(plik.readlines()) plik.close()
3. Zapisywanie danych do plików
Aby zapisać dane do pliku, otwieramy go w trybie "w"
(zapis) lub "a"
(dopisywanie). Metody write()
i writelines()
pozwalają na zapis zawartości.
# Zapis do nowego pliku plik = open("nowy_plik.txt", "w") plik.write("To jest pierwszy wiersz.\n") plik.write("To jest drugi wiersz.\n") plik.close() # Dopisywanie danych do istniejącego pliku plik = open("nowy_plik.txt", "a") plik.write("To jest dopisany wiersz.\n") plik.close()
4. Korzystanie z bloku with
Aby uprościć pracę z plikami i uniknąć błędów związanych z niezamkniętymi plikami, zaleca się korzystanie z bloku with
. Python automatycznie zamknie plik po zakończeniu pracy w tym bloku.
# Otwieranie i czytanie pliku z użyciem with with open("przykladowy_plik.txt", "r") as plik: for linia in plik: print(linia.strip()) # Usuwa białe znaki z końca linii # Zapisywanie do pliku z użyciem with with open("nowy_plik.txt", "w") as plik: plik.write("Dane zapisane z użyciem bloku with.\n")
5. Przykład praktyczny
Przykład programu, który odczytuje dane z jednego pliku, modyfikuje je i zapisuje do nowego pliku:
# Przykład: Kopiowanie pliku z modyfikacją with open("przykladowy_plik.txt", "r") as wejscie: dane = wejscie.readlines() # Dodanie numerów linii nowe_dane = [f"{i+1}: {linia}" for i, linia in enumerate(dane)] with open("kopiowany_plik.txt", "w") as wyjscie: wyjscie.writelines(nowe_dane)
6. Uwagi dotyczące kodowania
Podczas pracy z plikami tekstowymi, szczególnie w językach używających znaków spoza ASCII, takich jak polski, ważne jest określenie kodowania (encoding
):
# Otwieranie pliku z kodowaniem UTF-8 with open("plik_z_tekstami.txt", "r", encoding="utf-8") as plik: print(plik.read())
Domyślne kodowanie w Pythonie może różnić się w zależności od systemu operacyjnego, więc zawsze warto podawać encoding="utf-8"
, aby uniknąć błędów.
Obsługa błędów przy pracy z plikami
Praca z plikami może wiązać się z różnymi błędami, takimi jak brak dostępu do pliku, brak pliku w danej lokalizacji czy problemy z kodowaniem. Python oferuje mechanizm obsługi wyjątków, który pozwala na bezpieczne zarządzanie błędami i zapobieganie awariom programu.
1. Mechanizm obsługi wyjątków
Obsługa wyjątków w Pythonie jest realizowana za pomocą bloku try-except
. W przypadku wystąpienia błędu w sekcji try
, wykonanie kodu przechodzi do sekcji except
, gdzie możemy obsłużyć błąd.
# Obsługa błędu przy otwieraniu pliku try: with open("nieistniejacy_plik.txt", "r") as plik: zawartosc = plik.read() except FileNotFoundError: print("Plik nie został znaleziony. Sprawdź ścieżkę.")
Wynik (jeśli plik nie istnieje):
Plik nie został znaleziony. Sprawdź ścieżkę.
2. Obsługa różnych typów wyjątków
Python pozwala na obsługę różnych typów błędów w osobnych blokach except
. Dzięki temu możemy precyzyjnie reagować na konkretne problemy.
# Obsługa różnych typów błędów try: with open("plik.txt", "r", encoding="utf-8") as plik: zawartosc = plik.read() print(zawartosc) except FileNotFoundError: print("Błąd: Plik nie został znaleziony.") except PermissionError: print("Błąd: Brak uprawnień do otwarcia pliku.") except Exception as e: print(f"Wystąpił nieoczekiwany błąd: {e}")
Wynik (w zależności od błędu):
Błąd: Plik nie został znaleziony. lub Błąd: Brak uprawnień do otwarcia pliku. lub Wystąpił nieoczekiwany błąd: [opis błędu]
3. Użycie bloku finally
Blok finally
pozwala na wykonanie kodu, który powinien zostać uruchomiony niezależnie od tego, czy wystąpił błąd, czy nie. Jest to przydatne, na przykład, do zamknięcia pliku lub wyczyszczenia zasobów.
# Użycie bloku finally try: plik = open("plik.txt", "r") print(plik.read()) except FileNotFoundError: print("Plik nie istnieje.") finally: if 'plik' in locals() and not plik.closed: plik.close() print("Plik został zamknięty.")
Wynik:
Plik nie istnieje. lub [Zawartość pliku] Plik został zamknięty.
4. Własne komunikaty o błędach
Możesz dodać własne komunikaty o błędach, aby poinformować użytkownika o problemie w bardziej szczegółowy sposób:
# Własny komunikat o błędzie try: with open("plik.txt", "r") as plik: print(plik.read()) except FileNotFoundError: print("Błąd: Nie można otworzyć pliku, ponieważ go nie znaleziono.") except Exception as e: print(f"Wystąpił nieoczekiwany błąd: {e}")
5. Ignorowanie błędów
W niektórych sytuacjach możesz zdecydować się na ignorowanie błędów, pozostawiając pusty blok except
. Należy jednak stosować tę praktykę ostrożnie, ponieważ może to utrudniać debugowanie kodu.
# Ignorowanie błędów try: with open("plik.txt", "r") as plik: print(plik.read()) except: pass # Błąd zostanie zignorowany
6. Przykład praktyczny: Bezpieczne kopiowanie pliku
Przykład programu, który bezpiecznie kopiuje zawartość jednego pliku do drugiego, obsługując ewentualne błędy:
# Bezpieczne kopiowanie pliku try: with open("wejscie.txt", "r") as wejscie: dane = wejscie.read() with open("wyjscie.txt", "w") as wyjscie: wyjscie.write(dane) print("Plik został pomyślnie skopiowany.") except FileNotFoundError: print("Błąd: Plik wejściowy nie został znaleziony.") except PermissionError: print("Błąd: Brak uprawnień do plików.") except Exception as e: print(f"Wystąpił nieoczekiwany błąd: {e}")
Wynik (w zależności od sytuacji):
Plik został pomyślnie skopiowany. lub Błąd: Plik wejściowy nie został znaleziony. lub Błąd: Brak uprawnień do plików.
Następna lekcja ==> Podstawy programowania obiektowego
Spis Treści - darmowy kurs Python dla początkujących
Lekcja 1: Wprowadzenie do programowania
- Co to jest programowanie?
- Dlaczego warto uczyć się Pythona?
- Instalacja Python i wprowadzenie do edytorów (IDLE, VS Code).
Lekcja 2: Pierwszy program w Pythonie
- Składnia Pythona.
- Wyświetlanie tekstu (funkcja print).
- Komentarze i ich znaczenie.
Lekcja 3: Podstawowe typy danych
- Liczby: int, float.
- Ciągi znaków (stringi).
- Typ logiczny (boolean).
- Funkcja type.
Lekcja 4: Zmienne i operatory
- Deklaracja i przypisywanie zmiennych.
- Operatory arytmetyczne, porównania, logiczne.
Lekcja 5: Listy i krotki
- Tworzenie list i krotek.
- Indeksowanie, dodawanie, usuwanie elementów.
- Operacje na listach.
Lekcja 6: Słowniki i zbiory
- Tworzenie i operacje na słownikach.
- Iteracja po słownikach.
- Zbiory i ich zastosowania.
Lekcja 7: Instrukcje warunkowe
- Instrukcje if, elif, else.
- Operatory logiczne w praktyce.
Lekcja 8: Pętle
- Pętla for i while.
- Instrukcje break, continue, else w pętlach.
Lekcja 9: Funkcje
- Tworzenie i wywoływanie funkcji.
- Argumenty i wartości domyślne.
- Funkcje anonimowe (lambda).
Lekcja 10: Praca z plikami
- Otwieranie, czytanie i zapisywanie plików.
- Obsługa błędów przy pracy z plikami.
Lekcja 11: Podstawy programowania obiektowego
- Klasy i obiekty.
- Atrybuty i metody.
- Prosty projekt: Zarządzanie listą zadań.
Lekcja 12: Tworzenie prostego kalkulatora
- Łączenie funkcji i warunków.
- Obsługa błędów (try-except).
Lekcja 13: Zarządzanie plikami tekstowymi
- Program do przechowywania i wyszukiwania notatek w plikach.
Lekcja 14: Prosta gra tekstowa w Python
- Wprowadzenie do pętli i logiki gry.
- Interaktywna gra konsolowa, np. zgadywanie liczby.
Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: