Lekcja 10 – Praca z plikami

Kurs: Darmowy kurs Python dla początkujących
Lekcja 10: Praca z plikami

⇓ spis treści ⇓


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: