Wczytywanie i zapisywanie plików w Pythonie na maturze
W części praktycznej matury z informatyki wszystko zaczyna się od pliku z danymi. Jeśli ten pierwszy krok się nie uda, reszta zadania nie ma znaczenia — dlatego warto mieć go opanowany do automatu.
Umów pierwszą lekcję (60 zł) 60 minut 1:1 · Lekcja diagnostyczna: 60 zł · regularna lekcja: 119 zł / 60 min · ocena 5,0 na e-korepetycje.net
W tym artykule:
Konstrukcja with open(): wzorzec do zapamiętania
Konstrukcja with automatycznie zamyka plik, nawet gdy program przerwie działanie. Na egzaminie to standard, którego warto się trzymać.
with open('dane.txt', encoding='utf-8') as f:
wiersze = f.readlines()'r'— odczyt (domyślnie),'w'— zapis (nadpisuje),'a'— dopisywanie.- Parametr
encoding='utf-8'ratuje przed problemami z polskimi znakami. - Po bloku
withplik jest już zamknięty — nie próbuj z niego czytać.
Czytanie wiersz po wierszu i strip()
Każdy wiersz odczytany z pliku kończy się znakiem nowej linii. Bez strip() konwersja na liczbę zwykle się nie uda albo porównanie tekstu da fałszywy wynik.
with open('dane.txt') as f:
for wiersz in f:
w = wiersz.strip()
if not w:
continue
print(w)Rozdzielanie danych w wierszu
Gdy w jednym wierszu jest kilka wartości, użyj split(). Domyślnie dzieli po białych znakach, ale można podać separator.
with open('osoby.txt') as f:
for wiersz in f:
imie, wiek, miasto = wiersz.strip().split(';')
wiek = int(wiek)split()— po spacjach i tabulatorach.split(';')lubsplit(',')— po konkretnym separatorze.- Jeśli liczba pól bywa różna, przypisuj do listy zamiast do kilku zmiennych.
Konwersja typów: najczęstsze źródło błędów
Wszystko, co wczytasz z pliku, jest tekstem. Dopóki nie skonwertujesz danych, '12' + '3' da '123', a nie 15.
liczby = []
with open('dane.txt') as f:
for w in f:
w = w.strip()
if w:
liczby.append(int(w)) # float(w) dla liczb z przecinkiemJeśli w pliku są liczby z przecinkiem dziesiętnym, zamień przecinek na kropkę przed konwersją: float(w.replace(',', '.')).
Zapis wyników do pliku
with open('wyniki.txt', 'w', encoding='utf-8') as f:
f.write(f'Liczba rekordow: {len(liczby)}\n')
f.write(f'Srednia: {sum(liczby)/len(liczby):.2f}\n')- Nazwa pliku musi być zgodna z poleceniem — co do znaku.
- Format liczb (np. dwa miejsca po przecinku) bywa punktowany.
- Sprawdź plik wynikowy po zapisaniu, zanim przejdziesz do kolejnego zadania.
Umów pierwszą lekcję (60 zł)
Pełne 60 minut 1:1. Pierwsza lekcja diagnostyczna kosztuje 60 zł za 60 minut. Płatność następuje po lekcji; nie wymagamy karty. Wybierz, jak wolisz zacząć.
Zarezerwuj termin sam
Wybierasz dzień i godzinę w kalendarzu. Zajmuje 2 minuty, termin jest Wasz od razu.
- Widzisz wolne godziny od ręki
- Potwierdzenie mailem
- Termin przełożysz dzień wcześniej
Zostaw kontakt, oddzwonimy
Nie chcesz teraz wybierać godziny? Zostaw numer, ustalimy termin przez telefon.
Najczęstsze pytania
Twój kod działa na przykładzie, ale nie na danych z arkusza?
Na lekcji diagnostycznej za 60 zł przejdziemy przez Twoje rozwiązanie linijka po linijce i naprawimy miejsca, w których gubią się punkty.
Umów pierwszą lekcję (60 zł)Pierwsza lekcja diagnostyczna 60 min: 60 zł (płatność po lekcji, bez podawania karty z góry) • pierwsza lekcja diagnostyczna 60 zł / 60 min, płatność po lekcji · kolejne lekcje 119 zł / 60 min