Zapis do plików: write() i tryby r/w/a/x
Każdy tryb otwarcia to świadomy wybór, a nie szczegół składni.
write() sam nie dodaje linii
with open("log.txt", "w", encoding="utf-8") as f:
f.write("Hello")
f.write("World")
Tryby otwarcia - Przegląd
#rezultaty.txt już zawiera ważne wyniki z poprzedniej gry
with open("rezultaty.txt", "w", encoding="utf-8") as f:
pass # nawet nic nie nagrałem
(файл rezultaty.txt теперь пуст)
Plik stał się pusty, mimo że nie zapisaliśmy nic wewnątrz bloku. Otwieranie w trybie "w" kasuje wcześniejszą zawartość w momencie otwarcia, i to nie w momencie pierwszego write().
# Jeśli celem jest dodawanie, a nie zastępowanie, potrzebujesz trybu "a", a nie "w"
with open("rezultaty.txt", "a", encoding="utf-8") as f:
f.write(„Nowy wynik\n”)
Tryb „x”
try:
with open("save.json", "x", encoding="utf-8") as f:
f.write("{}")
except FileExistsError:
print(„Plik zapisu już istnieje – nie nadpisuj go przypadkiem”)
"x" będzie to wyraźnie komunikować za pomocą FileExistsError, zamiast cichego nadpisywania, które zrobiłby tryb "w".stroki = ["Anna", "Bob", "Carlos"]
with open("igroki.txt", "w", encoding="utf-8") as f:
f.writelines(stroki)
(файл igroki.txt содержит одну строку: AnnaBobCarlos)
Oczekiwano trzech linii, ale okazało się, że była to jedna połączona łańcuch znaków. writelines() — mimo nazwy — nie dodaje sama nowych liniipo prostu zapisuje elementy pojedynczo. Jeśli potrzebne są oddzielne linie, przewod linii musi być uwzględniony w każdym elemencie wcześniej.
stroki = ["Anna", "Bob", "Carlos"]
with open("igroki.txt", "w", encoding="utf-8") as f:
f.writelines(s + "\n" for s in stroki)
Trochę głębiej: Modyfikatory +
r+, w+, a+ od razu otworzyć plik do czytania i zapisu — ale podstawowa semantyka
Obcinaj/nadpisuj każdy tryb (w myje, a dodaje na końcu) nadal obowiązuje tutaj. Jest to opcjonalne
Materiał – Podstawowy r/w/a/x wystarczające dla większości programów.