Rozdział 15 · Python i akta

Duże pliki i przetwarzanie strumieni

Sposób odczytu pliku to rozwiązanie, które musi uwzględniać jego rozmiar.

Rozmiar pliku

razmer_fajla.py
from pathlib import Path

path = Path("spisok.txt")
print(path.stat().st_size, „bajt”)
Rozmiar w bajtach nie jest długością tekstu
.stat().st_size — to rozmiar w bajtach na dysku, a nie liczba znaków. Dla tekstu w UTF-8 z cyrylicą lub emoji te liczby, jak widzieliśmy w sekcji 15.17, zazwyczaj się nie zgadzają.

Mały plik vs duży plik

Wybór metody odczytu według rozmiaru pliku
plik jest znany z tego, że jest mały (ustawienia, krótka notatka)
read_text() / read() w całości – proste i przejrzyste
Plik może być bardzo duży (log, log dla roku)
przetwarzanie linia po linii – cykl for line in file
readlines() na naprawdę dużym pliku
Plik o rozmiarze 1 gigabajta logów to zły powód readlines(): całe lista linie muszą być przechowywane w pamięci jednocześnie. Pętla linia po linii for line in file przetwarza plik linijka po linii, nie gromadząc ich wszystkich naraz.

trochę głębiej: Czytanie danych binarnych w fragmentach

Dla bardzo dużych plików binarnych czasem nie wszystkie są czytane naraz, lecz w fragmentach (chunks) Stały rozmiar:

chunked_read.py
with open("bolshoy_fajl.bin", "rb") as f:
    while True:
        chunk = f.read(8192)   # 8192 bajtów
        if not chunk:
            break
        # przetworzyć chunk tutaj

To jest opcjonalny, bardziej dogłębny materiał – dla większości edukacyjnych i małych tematów Jest wystarczająco dużo zadań praktycznych czytania tekstu linia po linijce.

Mini-projekt: analizator pliku tekstowego

Liczenie łańcuch znaków, słów i znaków pliku w strumieniu — bez ładowania całego pliku do pamięci natychmiast jako pojedyncza linia:

analizator_fajla.py
from pathlib import Path

def analiz_fajla(path: Path) -> dict[str, int]:
    stroki = 0
    slova = 0
    simvoly = 0
    with path.open("r", encoding="utf-8") as f:
        for line in f:
            stroki += 1
            slova += len(line.split())
            simvoly += len(line)
    return {„struny”: stroki, „słowa”: slova, „symbole”: simvoly}

print(analiz_fajla(Path("spisok.txt")))
★★ Zadanie samodzielne
bajty osobno

Dodaj do raportu czwartą liczbę — rozmiar pliku w bajtach przez .stat().st_size — i porównaj go z liczbą znaków.

Praktyka: duże pliki i analizator tekstu
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →