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