Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

  1. Strona główna
  2. Blog
  3. Rozwój oprogramowania

Rozwój oprogramowania

Obsługa plików w Pythonie: Odczyt, zapis, CSV, JSON i pathlib z przykładami

Prawie każdy prawdziwy skrypt czyta lub zapisuje plik. Poznaj bezpieczny sposób otwierania plików, wybieraj odpowiedni tryb, obsługuj pliki CSV i JSON, pracuj ze ścieżkami za pomocą pathlib i unikaj błędu, który powoduje usunięcie danych.

9 min czytania
Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Najważniejsze

  • Zawsze otwieraj pliki z blokiem with, aby zamykały się automatycznie.
  • Tryb "w" usuwa istniejący plik. Użyj "a", aby dodać do jednego, lub "x", aby odmówić nadpisywania.
  • Zapętl obiekt pliku, aby odczytać duże pliki bez ładowania wszystkiego do pamięci.
  • Przekaż encoding="utf-8" jawnie i preferuj pathlib do budowania ścieżek.

Dzienniki, raporty, konfiguracja, eksporty: prędzej czy później każdy skrypt dotyka systemu plików. Obsługa plików w Pythonie jest prosta na początek, ale kilka szczegółów decyduje o tym, czy Twój kod jest niezawodny, czy też cicho niszczy dane.

Ten przewodnik omawia pliki tekstowe, CSV, JSON, dane binarne i ścieżki, ze szczególnym uwzględnieniem bezpiecznych nawyków. Uruchomiliśmy te przykłady w Pythonie 3.13 w folderze tymczasowym, a pokazane dane wyjściowe pochodzą z tego uruchomienia.

Otwórz pliki za pomocą open() i with

Wbudowana funkcja open() zwraca obiekt pliku. Użyj go wewnątrz bloku with:

with open("notes.txt", "w", encoding="utf-8") as file:
    file.write("first line\n")
    file.write("second line\n")

print(file.closed)

# True

Po zakończeniu bloku Python zamyka plik, nawet jeśli wystąpił w nim błąd. Bez with musisz sam wywołać close(), a wyjątek może pominąć tę linię. Użycie pliku po jego zamknięciu powoduje błąd:

file.read()

# ValueError: I/O operation on closed file.

Tryby plików

Drugi argument open() mówi, co planujesz zrobić:

Tryb Znaczenie Jeśli plik istnieje Jeśli tak się nie stanie
r Przeczytaj (domyślnie) Otwiera Błąd
w Napisz Najpierw to usuwa Tworzy to
a Dołącz Dodaje na koniec Tworzy to
x Ekskluzywne tworzenie Błąd Tworzy to
r+ Czytaj i pisz Otwiera Błąd

Dodaj b dla danych binarnych, jak w "rb" lub "wb". Tekst jest domyślny i można go również zapisać jawnie jako t.

Napisz i dołącz

write() nie dodaje podziału wiersza, więc dołącz \n siebie. Dołączanie zachowuje to, co już istnieje:

with open("notes.txt", "a", encoding="utf-8") as file:
    file.write("third line\n")

Porównaj to z trybem "w", który zastąpił nasze trzy linie jedną, bez żadnego ostrzeżenia:

with open("notes.txt", "w", encoding="utf-8") as file:
    file.write("replaced\n")

# notes.txt now contains only: replaced

Jeśli nie możesz czegoś nadpisać, użyj "x". W naszym teście podniosło FileExistsError, ponieważ notes.txt już istniało.

Przeczytaj plik

Sposobów czytania jest kilka, a właściwy wybór zależy od rozmiaru pliku:

Podejście Powroty Najlepsze dla
file.read() Jeden ciąg ze wszystkim Małe pliki
file.readline() Następna linia Czytanie nagłówka
file.readlines() Lista linii Małe pliki potrzebne jako lista
dla linii w pliku Jedna linia na raz Rozmiar dowolny, szczególnie duże pliki
with open("notes.txt", encoding="utf-8") as file:
    print(repr(file.read()))

# 'first line\nsecond line\n'

with open("notes.txt", encoding="utf-8") as file:
    for line in file:
        print(line.strip())

# first line
# second line
# third line

Zwróć uwagę na znaki \n przechowywane w surowym ciągu znaków. strip() usuwa je. Obiekt pliku również pamięta swoją pozycję, więc czytanie jest kontynuowane od miejsca, w którym zostało przerwane:

with open("notes.txt", encoding="utf-8") as file:
    print(file.readline().strip())
    print(file.readlines())

# first line
# ['second line\n', 'third line\n']

Zapętlanie pliku jest kluczową techniką w przypadku dużych dzienników i eksportów. Czyta wiersz po wierszu, więc wielogigabajtowy plik nie musi mieścić się w pamięci.

Obsługuj błędy plików

Plików może brakować, być zablokowane lub nieczytelne, więc zaplanuj to:

try:
    with open("missing.txt", encoding="utf-8") as file:
        data = file.read()
except FileNotFoundError as error:
    print(error)

# [Errno 2] No such file or directory: 'missing.txt'
Wyjątek Typowa przyczyna
Błąd FileNotFound Ścieżka nie istnieje
Błąd pliku Tryb x na istniejącym pliku
Błąd uprawnień Niedozwolone lub zablokowane w systemie Windows
JestADirectoryError Ścieżka to folder
Błąd UnicodeDecode Zastosowano nieprawidłowe kodowanie

Spróbuj otworzyć plik i wychwycić błąd, zamiast sprawdzać najpierw za pomocą exists(), ponieważ plik może zniknąć pomiędzy sprawdzeniem a otwarciem. Nasz przewodnik po obsłudze wyjątków w Pythonie omawia to podejście.

Pliki CSV

Nie dziel samodzielnie wierszy CSV przecinkami, ponieważ cytowane wartości mogą zawierać przecinki. Standardowy moduł csv obsługuje te reguły. DictWriter i DictReader to najbardziej czytelne opcje:

import csv

with open("orders.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["id", "customer", "total"])
    writer.writeheader()
    writer.writerow({"id": 1, "customer": "Asha", "total": 1200})
    writer.writerow({"id": 2, "customer": "Ben", "total": 300})

with open("orders.csv", newline="", encoding="utf-8") as file:
    rows = list(csv.DictReader(file))

print(rows[0])
print(sum(int(r["total"]) for r in rows))

# {'id': '1', 'customer': 'Asha', 'total': '1200'}
# 1500

Liczą się dwa szczegóły. Przekaż newline="" podczas otwierania plików CSV, zgodnie z zaleceniami dokumentacji, aby zapobiec pustym wierszom w systemie Windows. Każda wartość zwracana jest jako ciąg znaków, parzyste liczby, dlatego potrzebowaliśmy int() w sumie. W przypadku dużych ilości danych lepiej sprawdzi się biblioteka taka jak pandas.

pliki JSON

JSON to typowy format danych konfiguracyjnych i API. Odwzorowuje się starannie na słownikach Pythona i wyświetla listę:

import json

config = {"debug": True, "retries": 3, "hosts": ["a", "b"]}

with open("config.json", "w", encoding="utf-8") as file:
    json.dump(config, file, indent=2)

with open("config.json", encoding="utf-8") as file:
    print(json.load(file)["retries"])

# 3

Zapamiętaj nazewnictwo: dump i load działają z plikami, podczas gdy dumps i loads działają z ciągami znaków. Typów takich jak daty nie można przechowywać bezpośrednio, dlatego należy je najpierw przekonwertować na ciągi znaków.

Pracuj ze ścieżkami za pomocą pathlib

Sklejanie ścieżek za pomocą ciągów powoduje przerwanie pracy w różnych systemach operacyjnych. Standardowy moduł pathlib obsługuje za Ciebie separatory i oferuje przydatne skróty:

from pathlib import Path

path = Path("data") / "reports" / "summary.txt"
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("all good\n", encoding="utf-8")

print(path.read_text(encoding="utf-8").strip())   # all good
print(path.suffix, path.stem, path.exists())      # .txt summary True
print(sorted(p.name for p in Path(".").glob("*.csv")))
# ['orders.csv']
Zadanie ścieżka_biblioteki
Połącz ścieżki Ścieżka("a") / "b.txt"
Twórz foldery ścieżka.mkdir(rodzice=prawda, istnieje_ok=prawda)
Przeczytaj lub napisz cały tekst read_text(), write_text()
Znajdź pliki glob("*.csv"), rglob("*.py")
Usuń plik path.unlink()
Pobierz folder bieżącego skryptu Path(__file__).parent

To ostatnie rozwiązuje powszechny ból głowy. Ścieżki względne są wyznaczane z miejsca, w którym uruchomono skrypt, a nie z miejsca, w którym znajduje się skrypt, więc budowanie ścieżek z Path(__file__).parent pozwala uniknąć wielu niespodzianek związanych z „nie odnalezieniem pliku”.

Pliki binarne

Obrazy, pliki PDF i ZIP nie są tekstem. Otwórz je za pomocą b, a będziesz czytać i pisać bytes, bez użycia kodowania:

with open("pixel.bin", "wb") as file:
    file.write(bytes([255, 0, 128]))

with open("pixel.bin", "rb") as file:
    print(file.read())

# b'\xff\x00\x80'

Bezpieczniej pisze

Jeśli program ulegnie awarii w połowie zapisywania ważnego pliku, może to spowodować uszkodzenie wyniku. Typowym rozwiązaniem jest najpierw zapisanie pliku tymczasowego, a następnie zamiana go na miejsce:

temp = Path("settings.tmp")
temp.write_text("new", encoding="utf-8")
temp.replace("settings.txt")

print(Path("settings.txt").read_text(), temp.exists())

# new False

replace() zastępuje miejsce docelowe. W tym samym systemie plików zmiana nazwy jest zazwyczaj atomowa, więc czytelnicy widzą albo stary plik, albo nowy, a nie na wpół napisany miks.

Wskazówka: Nigdy nie twórz ścieżek plików bezpośrednio na podstawie danych wprowadzonych przez użytkownika bez ich sprawdzenia. Wartość taka jak ../../secrets.txt może dotrzeć do plików poza zamierzonym folderem. Nazywa się to luką w zabezpieczeniach związaną z przechodzeniem ścieżki.

Praktyczny przykład: podsumowanie dziennika

Ten krótki scenariusz łączy w sobie kilka pomysłów. Odczytuje dziennik po linii, więc jego rozmiar nie ma znaczenia, liczy każdy poziom za pomocą Counter i zapisuje podsumowanie do nowego pliku:

from collections import Counter

counts = Counter()
with open("app.log", encoding="utf-8") as file:
    for line in file:
        counts[line.split()[0]] += 1

with open("summary.txt", "w", encoding="utf-8") as out:
    for level, total in counts.most_common():
        out.write(f"{level}: {total}\n")

# summary.txt
# ERROR: 2
# INFO: 2
# WARN: 1

Nasz przykładowy dziennik miał pięć linii. Pusta linia zostanie przerwana line.split()[0], więc prawdziwe skrypty powinny najpierw pominąć puste linie.

Typowe błędy

  • Użyłeś "w", gdy miałeś na myśli "a". Twoje istniejące dane zostaną natychmiast otwarte, nawet jeśli nigdy nic nie napiszesz.
  • Pomijanie kodowania. Wartość domyślna różni się w zależności od systemu, więc skrypt działający w systemie Linux może nie działać w systemie Windows z tekstem akcentowanym lub emoji.
  • Wywoływanie read() w przypadku dużych plików. Może to wyczerpać pamięć, więc zamiast tego pętluj linie.
  • Zapomnienie int() o wartościach CSV. "10" + "20" daje "1020".
  • Pomijam newline="" w przypadku pliku CSV. W systemie Windows mogą pojawić się nieoczekiwane puste wiersze.
  • Nie testuję kodu pliku. Użyj urządzenia pytest tmp_path, aby testy nigdy nie dotykały prawdziwych plików. Zobacz nasz samouczek dotyczący testów Pythona.

Podsumowanie

Kilka nawyków obejmuje tutaj prawie wszystko: użyj with, ustaw kodowanie, zastanów się dwa razy nad "w" i pozwól, aby csv, json i pathlib wykonały najtrudniejsze części. Aby poćwiczyć, napisz mały skrypt, który odczytuje plik CSV, sumuje jedną kolumnę i zapisuje podsumowanie JSON w nowym folderze.

Najczęstsze pytania

Jak odczytać plik linia po linii w Pythonie?

Otwórz go w bloku with i zapętlaj obiekt pliku. Odczytuje jedną linię na raz, więc działa dobrze nawet w przypadku bardzo dużych plików.

Jaka jest różnica między w a trybem?

Tryb w usuwa całą istniejącą zawartość natychmiast po otwarciu pliku. Tryb a zachowuje istniejącą zawartość i dodaje nowe dane na końcu pliku.

Dlaczego powinienem używać with do otwierania pliku?

Instrukcja with zamyka plik automatycznie po zakończeniu bloku, nawet jeśli wystąpi błąd. Zapobiega to wyciekom i pomaga zapewnić zapisanie danych.

Jak sprawdzić, czy plik istnieje w Pythonie?

Użyj Path(“name.txt”).exists() z pathlib. Jeśli planujesz otworzyć go od razu, wyłapanie FileNotFoundError jest zwykle bardziej niezawodne niż sprawdzanie najpierw.

Dlaczego mój plik CSV ma puste linie w systemie Windows?

Prawdopodobnie otworzyłeś plik bez znaku newline=””. Moduł csv sam zarządza zakończeniami linii, więc podaj ten argument, aby uniknąć dodatkowych pustych wierszy.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Testowanie oprogramowania

Testowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady

Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać

Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…

Przeczytaj artykuł →
Bazy danych i SQL

Instrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy

SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Co to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania

Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami

Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom

Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …

Przeczytaj artykuł →
Sztuczna inteligencja

Czym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa

Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…

Przeczytaj artykuł →
DevOps

Wdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru

Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…

Przeczytaj artykuł →
Automatyzacja testów

Niestabilne testy: co je powoduje i jak je naprawić na dobre

Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…

Przeczytaj artykuł →
Testowanie oprogramowania

Load Testing vs Stress Testing: Differences, Metrics and k6 Examples

Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…

Przeczytaj artykuł →
Testowanie oprogramowania

Przypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich

Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…

Przeczytaj artykuł →
Bazy danych i SQL

Optymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją

Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…

Przeczytaj artykuł →
Bazy danych i SQL

SQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność

SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…

Przeczytaj artykuł →
Tworzenie oprogramowania

Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…

Przeczytaj artykuł →
Tworzenie oprogramowania

Klasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami

Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu

Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…

Przeczytaj artykuł →
DevOps

Polecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami

Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…

Przeczytaj artykuł →
Automatyzacja testów

Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…

Przeczytaj artykuł →
Testowanie oprogramowania

Partycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach

Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…

Przeczytaj artykuł →
Testowanie oprogramowania

Ważność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady

Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…

Przeczytaj artykuł →
Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji

Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →