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
Вторая: ''
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”)
| Metoda | Co wraca | Pamięć |
|---|---|---|
for line in file | po jednej linii na raz | oszczędnie — nadaje się do dużych plików |
file.readlines() | lista wszystkie linie naraz | wszystkie 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