Rozdział 15 · Python i akta

Przeczytaj akta: read(), readline(), readlines()

Ten sam plik można odczytać na różne sposoby – a wybór metody jest wyborem, a nie formalnością.

read() — cały plik

read_ves.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    content = f.read()
read() nie zawsze jest zły
W przypadku małych plików czytanie wszystkiego naraz jest proste i wygodne. Dla bardzo dużych plików (gigabajty logów) może to zajmować dużo pamięci — wtedy lepiej czytać linię po linii lub w fragmentach (sekcja 15.23). Nie ma jednego rozwiązania, które zawsze jest właściwe — ważne jest, by wybrać dane zadanie.

readline() — linijka po linii

readline.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    print(f.readline())   # pierwszy łańcuch znaków
    print(f.readline())   # drugi łańcuch znaków
    # ...
    print(repr(f.readline()))   # '' — kiedy łańcuch znaków już nie ma
Debug Lab 4: read() zamiast readline()
odna_stroka.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    first_line = f.read()   # chciałem jednej linii
    second_line = f.read()
    print(„Pierwsza:”, first_line)
    print(„Drugi:”, repr(second_line))
Первая: яблоки\nхлеб\nмолоко\nсыр\n
Вторая: ''
Co widać na ekranie

Każde połączenie miało odpowiedzieć na jedną linię — ale read() czyta bez sprzeciwu cały pozostały plik, a nie jeden wiersz. Kursor od razu znalazł się na końcu, a drugie wywołanie zwróciło pusty łańcuch znaków.

Poprawiony kod
odna_stroka_fixed.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    first_line = f.readline()
    second_line = f.readline()
    print(„Pierwsza:”, first_line.strip())
    print(„Drugi:”, second_line.strip())

Pętla plików jest preferowaną metodą

cikl_po_fajlu.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())
Obiekt pliku — iterowalny
Podobnie jak lista czy łańcuch znaków (Rozdział 10), obiekt pliku może być zapętlony for bezpośrednio Python czyta linię po linii, nie ładując całego pliku do pamięci.

readlines() — wszystkie linie w postaci listy

readlines_spisok.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

print(len(lines), „linie”)
MetodaCo wracaPamięć
for line in filepo jednej linii na razoszczędnie — nadaje się do dużych plików
file.readlines()lista wszystkie linie narazwszystkie lista linie w pamięci jednocześnie
Praktyka: read(), readline(), readlines()
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →