← Back to course

Pliki: zapisywanie i odczytywanie danych

Pliki: zapisywanie i odczytywanie danych

Witaj z powrotem.

W poprzedniej lekcji nauczyłeś się funkcji.

Twoje programy nauczyły się organizować kod w bloki wielokrotnego użytku.

Pisałeś rzeczy takie jak:

def greet_user(name):
    print(f"Hello, {name}!")

Bardzo dobrze.

Funkcje sprawiły, że twój kod stał się czystszy.

Mniej powtórzeń.

Mniej chaosu kopiuj-wklej.

Mniej “dlaczego napisałem to samo siedem razy?”

Świetny postęp.

Ale teraz mamy kolejny problem.

Twój program może przechowywać dane w zmiennych.

Twój program może przechowywać listy.

Twój program może przechowywać słowniki.

Ale kiedy program się kończy, wszystko znika.

Bardzo smutne.

Bardzo tymczasowe.

Przykład:

tasks = ["Buy milk", "Study Python", "Drink coffee"]

Ta lista istnieje, kiedy program działa.

Ale kiedy program się kończy?

Znika.

Jak motywacja po przeczytaniu błędu na 300 linii.

Pliki rozwiązują ten problem.

Pliki pozwalają programowi zapisywać dane.

Potem program może odczytać te dane później.

To duży krok.

Programy stają się dużo bardziej użyteczne, kiedy potrafią pamiętać rzeczy.

Zadania.

Notatki.

Kontakty.

Ustawienia.

Raporty.

Logi.

Małe wspomnienia.

Bardzo użyteczne.

Bardzo Python.

Czego się nauczysz

W tej lekcji nauczysz się:

Pod koniec tej lekcji twoje programy nie będą już natychmiast wszystkiego zapominać.

Będą mogły zapisywać dane.

Czytać dane.

Dopisywać dane.

Ładować dane.

Bardzo potężne.

Bardzo praktyczne.

Bardzo “teraz ten program zaczyna być użyteczny”.

Dlaczego pliki są ważne

Zmienne żyją w pamięci.

Pliki żyją na dysku.

Zmienna jest tymczasowa:

name = "Anna"

Kiedy program się kończy, zmienna znika.

Plik może zostać po zakończeniu programu.

Na przykład:

notes.txt
tasks.txt
contacts.txt
report.txt

Twój program może zapisać dane do pliku.

Później program może otworzyć plik i odczytać dane.

To ważne dla wielu prawdziwych programów.

Przykłady:

Task manager zapisuje zadania.
Aplikacja notatek zapisuje notatki.
Kalkulator zapisuje historię.
Gra zapisuje postęp.
Strona internetowa zapisuje logi.
Skrypt zapisuje raport.

Bez plików twój program ma bardzo krótką pamięć.

Jak złota rybka z klawiaturą.

Urocze.

Niezbyt użyteczne.

Zapisywanie do pliku

Utwórz plik:

write_file.py

Napisz:

file = open("message.txt", "w")

file.write("Hello from Python!")

file.close()

Uruchom:

python write_file.py

albo:

python3 write_file.py

Python stworzy plik o nazwie:

message.txt

W środku pliku powinieneś zobaczyć:

Hello from Python!

Ta linia otwiera plik:

file = open("message.txt", "w")

Ta linia zapisuje tekst:

file.write("Hello from Python!")

Ta linia zamyka plik:

file.close()

Bardzo ważne:

Zawsze zamykaj pliki, jeśli otwierasz je ręcznie.

Ale Python ma lepszy sposób.

Bo Python zobaczył, że ludzie zapominają rzeczy, i powiedział:

Dobrze, pomogę.

Używanie with open()

Lepszym sposobem jest with open().

Przykład:

with open("message.txt", "w") as file:
    file.write("Hello from Python!")

To robi to samo.

Ale automatycznie zamyka plik.

Dużo lepiej.

Dużo bezpieczniej.

Dużo mniej “ups, zapomniałem close()”.

Utwórz plik:

write_file_with.py

Napisz:

with open("message.txt", "w") as file:
    file.write("Hello from Python with with open()!")

Uruchom.

Otwórz message.txt.

Powinieneś zobaczyć:

Hello from Python with with open()!

Od teraz używaj:

with open(...)

To jest zalecany styl.

Czystszy.

Bezpieczniejszy.

Bardziej profesjonalny.

Mniej powodów, żeby Python wzdychał.

Tryby plików

Kiedy otwierasz plik, wybierasz tryb.

Tryb mówi Pythonowi, co chcesz zrobić.

Najczęstsze tryby:

"r"  read, czyli czytanie
"w"  write, czyli pisanie
"a"  append, czyli dopisywanie

Przykład:

open("file.txt", "r")

oznacza:

Otwórz plik do czytania.

Przykład:

open("file.txt", "w")

oznacza:

Otwórz plik do pisania.

Przykład:

open("file.txt", "a")

oznacza:

Otwórz plik do dopisywania na końcu.

Ważne ostrzeżenie:

"w" nadpisuje plik.

Jeśli plik miał już zawartość, "w" ją zastępuje.

Bez litości.

Bez dramatu.

Po prostu znika.

Python w trybie "w" jest jak:

Nowy plik. Nowe życie. Stara zawartość? Do widzenia.

Uważaj.

Zapisywanie wielu linii

Możesz zapisywać wiele linii, używając \n.

Przykład:

with open("notes.txt", "w") as file:
    file.write("First line\n")
    file.write("Second line\n")
    file.write("Third line\n")

\n oznacza:

nowa linia

Po uruchomieniu programu notes.txt będzie zawierał:

First line
Second line
Third line

Bez \n wszystko zostaje w jednej linii.

Przykład:

file.write("First")
file.write("Second")

Wynik:

FirstSecond

Nieładnie.

Nieczytelnie.

Wszystko sklejone.

Używaj \n, kiedy chcesz nową linię.

Mały symbol.

Duża moc formatowania.

Odczytywanie pliku

Utwórz plik o nazwie:

message.txt

Wpisz do niego tekst:

Hello from a file!

Teraz utwórz plik Python:

read_file.py

Napisz:

with open("message.txt", "r") as file:
    content = file.read()

print(content)

Uruchom.

Output:

Hello from a file!

Ta linia otwiera plik do czytania:

with open("message.txt", "r") as file:

Ta linia czyta cały plik:

content = file.read()

Potem drukujemy zawartość:

print(content)

Bardzo proste.

Bardzo użyteczne.

Twój program właśnie odczytał dane z dysku.

Mały moment.

Duża moc.

Czytanie całego pliku czy linii

read() czyta cały plik.

Przykład:

with open("notes.txt", "r") as file:
    content = file.read()

To jest w porządku dla małych plików.

Ale czasem chcesz czytać linia po linii.

Przykład:

with open("notes.txt", "r") as file:
    for line in file:
        print(line)

Jeśli notes.txt zawiera:

First line
Second line
Third line

Output może wyglądać tak:

First line

Second line

Third line

Dlaczego są dodatkowe puste linie?

Bo każda linia już ma znak nowej linii na końcu.

A print() dodaje kolejną nową linię.

Bardzo hojnie.

Zbyt hojnie.

Możemy to poprawić przez .strip().

Używanie strip()

.strip() usuwa dodatkowe białe znaki z początku i końca stringa.

Usuwa też znaki nowej linii.

Przykład:

text = "Hello\n"
clean_text = text.strip()

print(clean_text)

Output:

Hello

Używaj tego podczas czytania linii:

with open("notes.txt", "r") as file:
    for line in file:
        print(line.strip())

Teraz output jest czystszy:

First line
Second line
Third line

.strip() jest bardzo użyteczne przy czytaniu plików.

Pliki często zawierają nowe linie.

Ludzie często nie chcą widzieć dziwnych odstępów.

Python daje .strip().

Małe narzędzie.

Duża ulga.

Dopisywanie do pliku

Tryb "w" nadpisuje plik.

Tryb "a" dopisuje na końcu.

Utwórz plik:

append_file.py

Napisz:

with open("notes.txt", "a") as file:
    file.write("New note\n")

Uruchom go kilka razy.

Za każdym razem Python dopisze:

New note

na końcu pliku.

To jest użyteczne dla:

logów
notatek
zadań
historii
raportów

Tryb append jest bezpieczniejszy, kiedy nie chcesz usuwać starej zawartości.

Pamiętaj:

"w" pisze od zera.
"a" dopisuje na końcu.

Bardzo ważne.

Bardzo przetrwanie plików.

Zapisywanie inputu użytkownika do pliku

Utwórz plik:

save_note.py

Napisz:

note = input("Write a note: ")

with open("notes.txt", "a") as file:
    file.write(note + "\n")

print("Note saved.")

Przykład:

Write a note: Study Python files

Program zapisuje notatkę do:

notes.txt

Jeśli uruchomisz go ponownie, doda kolejną notatkę.

To już jest użyteczne.

Malutki zapis notatek.

Nie fancy.

Nie cloud-based.

Bez abonamentu.

Po prostu plik.

Pięknie.

Czytanie zapisanych notatek

Utwórz plik:

show_notes.py

Napisz:

with open("notes.txt", "r") as file:
    for line in file:
        print(f"- {line.strip()}")

Jeśli notes.txt zawiera:

Study Python files
Drink coffee
Build something useful

Output:

- Study Python files
- Drink coffee
- Build something useful

Teraz masz dwa programy:

save_note.py
show_notes.py

Jeden zapisuje notatki.

Drugi czyta notatki.

Malutki system.

Bardzo skromny.

Bardzo użyteczny.

Początek software.

Z mniejszą ilością formularzy logowania.

Na razie.

FileNotFoundError

Jeśli spróbujesz czytać plik, który nie istnieje, Python da błąd.

Przykład:

with open("missing.txt", "r") as file:
    content = file.read()

Błąd:

FileNotFoundError

Dlaczego?

Bo "missing.txt" nie istnieje.

Python nie może czytać pliku, którego nie ma.

Bardzo logiczne.

Bardzo irytujące.

Jeden prosty sposób to najpierw stworzyć plik.

Inny sposób to obsłużyć błąd.

Obsługi błędów nauczymy się głębiej później.

Na razie pamiętaj:

Czytanie wymaga, żeby plik istniał.
Pisanie może stworzyć plik.
Append może stworzyć plik, jeśli go nie ma.

To ważne.

Bardzo praktyczne.

Bardzo “dlaczego mój skrypt się wywalił?” praktyczne.

Zapisywanie listy do pliku

Wyobraź sobie, że mamy listę:

tasks = ["Buy milk", "Study Python", "Clean desk"]

Możemy zapisać każdy element w osobnej linii.

Przykład:

tasks = ["Buy milk", "Study Python", "Clean desk"]

with open("tasks.txt", "w") as file:
    for task in tasks:
        file.write(task + "\n")

Plik tasks.txt będzie zawierał:

Buy milk
Study Python
Clean desk

To jest proste i użyteczne.

Każde zadanie staje się jedną linią.

Lista w Pythonie staje się liniami w pliku.

Bardzo jasno.

Bardzo przyjaźnie dla początkujących.

Bardzo praktycznie.

Ładowanie listy z pliku

Teraz możemy odczytać plik i odbudować listę.

Przykład:

tasks = []

with open("tasks.txt", "r") as file:
    for line in file:
        tasks.append(line.strip())

print(tasks)

Output:

['Buy milk', 'Study Python', 'Clean desk']

Co się dzieje?

Zaczynamy od pustej listy.
Otwieramy plik.
Czytamy każdą linię.
Usuwamy nową linię przez strip().
Dodajemy czysty tekst do listy.

Teraz plik znowu stał się listą Pythona.

To bardzo ważne.

Tak program może pamiętać dane między uruchomieniami.

Zapisz listę.

Zamknij program.

Otwórz program później.

Wczytaj listę.

Pamięć osiągnięta.

Małe zwycięstwo.

Budowanie funkcji pomocniczych

Znamy już funkcje.

Możemy więc zorganizować logikę plików w funkcje.

Przykład:

def save_tasks(tasks):
    with open("tasks.txt", "w") as file:
        for task in tasks:
            file.write(task + "\n")

I:

def load_tasks():
    tasks = []

    with open("tasks.txt", "r") as file:
        for line in file:
            tasks.append(line.strip())

    return tasks

Teraz główny program może używać:

tasks = load_tasks()
save_tasks(tasks)

To jest czystsze.

Funkcje i pliki dobrze ze sobą współpracują.

Funkcje organizują zachowanie.

Pliki przechowują dane.

Bardzo ładnie.

Energia prawdziwego software.

Prosta obsługa brakującego pliku

Jeśli plik nie istnieje, load_tasks() się wywali.

Możemy obsłużyć to przez try i except.

Bez paniki.

To tylko prosta wersja.

Przykład:

def load_tasks():
    tasks = []

    try:
        with open("tasks.txt", "r") as file:
            for line in file:
                tasks.append(line.strip())
    except FileNotFoundError:
        pass

    return tasks

Co się dzieje?

Spróbuj otworzyć tasks.txt.
Jeśli istnieje, wczytaj zadania.
Jeśli nie istnieje, zignoruj błąd.
Zwróć pustą listę.

To jest użyteczne.

Za pierwszym razem, kiedy uruchamiasz program, plik może jeszcze nie istnieć.

To normalne.

Program nie powinien eksplodować teatralnie.

To try i except utrzymuje go spokojnym.

Jak joga dla Pythona.

Przeważnie.

Mini program: zapis jednego zadania

Utwórz plik:

save_task.py

Napisz:

task = input("Task: ")

with open("tasks.txt", "a") as file:
    file.write(task + "\n")

print("Task saved.")

Uruchom.

Przykład:

Task: Study Python files

Uruchom ponownie.

Przykład:

Task: Build a small app

Teraz tasks.txt zawiera:

Study Python files
Build a small app

To już jest użyteczny mały skrypt.

Mały.

Prosty.

Ale pamięta.

A pamiętanie jest potężne.

Chyba że pamięta kompromitujące nazwy zmiennych.

Wtedy trochę mniej potężne.

Mini program: pokazywanie zadań

Utwórz plik:

show_tasks.py

Napisz:

try:
    with open("tasks.txt", "r") as file:
        print("Tasks:")

        for line in file:
            print(f"- {line.strip()}")
except FileNotFoundError:
    print("No tasks found.")

Jeśli plik istnieje, pokazuje zadania.

Jeśli plik nie istnieje, drukuje:

No tasks found.

To lepsze niż crash.

Crash jest edukacyjny.

Ale nie zawsze przyjazny.

Dobry program obsługuje proste problemy.

Brakujący plik to prosty problem.

Przeważnie.

Mini program: task manager z plikami

Teraz zbudujemy task manager, który pamięta zadania.

Utwórz plik:

task_manager_files.py

Napisz:

FILE_NAME = "tasks.txt"

def load_tasks():
    tasks = []

    try:
        with open(FILE_NAME, "r") as file:
            for line in file:
                tasks.append(line.strip())
    except FileNotFoundError:
        pass

    return tasks

def save_tasks(tasks):
    with open(FILE_NAME, "w") as file:
        for task in tasks:
            file.write(task + "\n")

def show_menu():
    print("----- Task Manager -----")
    print("1. Add task")
    print("2. Show tasks")
    print("q. Quit")

def add_task(tasks):
    task = input("Task: ")
    tasks.append(task)
    save_tasks(tasks)
    print("Task saved.")

def show_tasks(tasks):
    if len(tasks) == 0:
        print("No tasks yet.")
    else:
        print("Tasks:")

        for task in tasks:
            print(f"- {task}")

tasks = load_tasks()

while True:
    show_menu()

    choice = input("Choose an option: ").lower()

    if choice == "1":
        add_task(tasks)
    elif choice == "2":
        show_tasks(tasks)
    elif choice == "q":
        print("Goodbye.")
        break
    else:
        print("Unknown option.")

To prawdziwa poprawa.

Wcześniej task manager wszystko zapominał.

Teraz zapisuje zadania do pliku.

Kiedy program startuje, ładuje zadania z pliku.

Kiedy dodajesz zadanie, zapisuje listę ponownie.

To zachowanie prawdziwego programu.

Bardzo dobrze.

Bardzo praktycznie.

Bardzo “mój kod ma teraz pamięć”.

Jak działa task manager

Nazwa pliku jest zapisana tutaj:

FILE_NAME = "tasks.txt"

Ta funkcja ładuje zadania:

def load_tasks():

Ta funkcja zapisuje zadania:

def save_tasks(tasks):

Ta funkcja dodaje zadanie:

def add_task(tasks):

W środku add_task robimy:

tasks.append(task)
save_tasks(tasks)

To znaczy:

Dodaj zadanie do listy.
Zapisz zaktualizowaną listę do pliku.

Ważna idea:

Lista jest używana, gdy program działa.
Plik przechowuje dane między uruchomieniami programu.

To bardzo ważny schemat programowania.

Pamięć w RAM.

Przechowywanie na dysku.

Twój program używa teraz obu.

Bardzo poważnie.

Bardzo użytecznie.

Pisanie vs dopisywanie w task managerze

W save_tasks używamy "w":

with open(FILE_NAME, "w") as file:

Dlaczego nie "a"?

Bo chcemy zapisać całą aktualną listę.

Gdybyśmy użyli "a", zadania mogłyby się dublować przy każdym zapisie.

Przykład:

Buy milk
Study Python
Buy milk
Study Python

Niedobrze.

Dlatego przy zapisywaniu całego aktualnego stanu używaj "w".

Do dodawania jednej nowej linii bezpośrednio używaj "a".

Prosta zasada:

Używaj "w", kiedy zapisujesz cały aktualny stan.
Używaj "a", kiedy dodajesz jeden nowy element na końcu.

To bardzo ważne.

Mała litera trybu.

Duża różnica.

Typowy błąd: zapomnienie o zamknięciu pliku

Ręczny sposób:

file = open("notes.txt", "w")
file.write("Hello")

Tutaj brakuje:

file.close()

Lepiej:

with open("notes.txt", "w") as file:
    file.write("Hello")

Używaj with open().

To automatycznie zamyka plik.

To styl, którego powinieneś używać przez większość czasu.

Czysto.

Bezpiecznie.

Profesjonalnie.

Bez zapomnianych otwartych plików błąkających się jak zagubione kozy.

Typowy błąd: użycie w i usunięcie starych danych

To może być niebezpieczne:

with open("notes.txt", "w") as file:
    file.write("New note\n")

Jeśli notes.txt miał już zawartość, zostanie zastąpiona.

Zniknie.

Jeśli chcesz dodać do pliku, użyj "a":

with open("notes.txt", "a") as file:
    file.write("New note\n")

Pamiętaj:

"w" nadpisuje.
"a" dopisuje.

To jedna z najważniejszych lekcji o plikach.

Nie ucz się jej bolesnym sposobem.

Bolesny sposób jest bardzo skuteczny.

Ale bardzo bolesny.

Typowy błąd: zapomnienie nowej linii

Źle:

with open("tasks.txt", "a") as file:
    file.write("Buy milk")
    file.write("Study Python")

Wynik w pliku:

Buy milkStudy Python

Poprawnie:

with open("tasks.txt", "a") as file:
    file.write("Buy milk\n")
    file.write("Study Python\n")

Wynik w pliku:

Buy milk
Study Python

Używaj \n, kiedy każdy element powinien być w nowej linii.

Nowe linie są małe.

Ale bez nich tekst staje się makaronem.

Nie dobrym makaronem.

Bugowym makaronem.

Typowy błąd: czytanie brakującego pliku

Źle:

with open("tasks.txt", "r") as file:
    content = file.read()

To nie zadziała, jeśli tasks.txt nie istnieje.

Bezpieczniej:

try:
    with open("tasks.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    content = ""

Teraz program nie crashuje.

Używa pustej zawartości, jeśli plik nie istnieje.

To jest użyteczne, kiedy plik ma zostać stworzony później.

Wiele początkujących programów z plikami pada przy pierwszym uruchomieniu.

Dlaczego?

Bo plik jeszcze nie istnieje.

Klasyka.

Bardzo klasyka.

Typowy błąd: nieużywanie strip()

Kiedy czytasz linie, możesz dostać znaki nowej linii.

Przykład:

tasks = []

with open("tasks.txt", "r") as file:
    for line in file:
        tasks.append(line)

To może zapisać:

["Buy milk\n", "Study Python\n"]

Lepiej:

tasks.append(line.strip())

Teraz dostajesz:

["Buy milk", "Study Python"]

Używaj .strip(), kiedy chcesz czysty tekst.

Zwłaszcza przy czytaniu linia po linii.

Twój przyszły output będzie wyglądał lepiej.

I mniej jak nawiedzony.

Typowy błąd: zamieszanie ze ścieżką pliku

To:

with open("tasks.txt", "r") as file:

szuka tasks.txt w aktualnym katalogu roboczym.

To znaczy:

folder, z którego uruchamiasz komendę Python

Jeśli Python mówi, że pliku nie ma, może plik istnieje w innym folderze.

Przykład:

python scripts/task_manager.py

Aktualny katalog może nie być tym samym folderem, w którym jest skrypt.

To może mylić początkujących.

Bardzo normalne.

Na razie trzymaj plik Python i plik tekstowy w tym samym folderze.

Uruchamiaj komendę z tego folderu.

Prosto.

Mniej dramatu ścieżek.

Dramat ścieżek jest prawdziwy.

I czasem pikantny.

Praktyka

Utwórz plik:

practice_files.py

Napisz program, który:

Przykładowe rozwiązanie:

name = input("Name: ")
city = input("City: ")

with open("profile.txt", "w") as file:
    file.write(name + "\n")
    file.write(city + "\n")

with open("profile.txt", "r") as file:
    lines = []

    for line in file:
        lines.append(line.strip())

print("----- Profile -----")
print(f"Name: {lines[0]}")
print(f"City: {lines[1]}")

Przykład:

Name: Anna
City: Rome

Output:

----- Profile -----
Name: Anna
City: Rome

Ten program zapisuje dane.

Potem czyta dane.

Potem używa wczytanych danych.

Bardzo ważny schemat.

Zapisz.

Wczytaj.

Użyj.

To jest obsługa plików w pigułce.

Małej pigułce.

Z Pythonem w środku.

Mini wyzwanie

Utwórz plik:

notes_app.py

Twój program powinien:

Menu:

1. Add note
2. Show notes
q. Quit

Przykładowe rozwiązanie:

FILE_NAME = "notes.txt"

def show_menu():
    print("----- Notes App -----")
    print("1. Add note")
    print("2. Show notes")
    print("q. Quit")

def add_note():
    note = input("Note: ")

    with open(FILE_NAME, "a") as file:
        file.write(note + "\n")

    print("Note saved.")

def show_notes():
    try:
        with open(FILE_NAME, "r") as file:
            print("Notes:")

            has_notes = False

            for line in file:
                print(f"- {line.strip()}")
                has_notes = True

            if not has_notes:
                print("No notes yet.")
    except FileNotFoundError:
        print("No notes yet.")

while True:
    show_menu()

    choice = input("Choose an option: ").lower()

    if choice == "1":
        add_note()
    elif choice == "2":
        show_notes()
    elif choice == "q":
        print("Goodbye.")
        break
    else:
        print("Unknown option.")

To prawdziwa mini aplikacja.

Używa:

Bardzo mocne.

Bardzo użyteczne.

Projekt dla początkujących, ale już realny.

Mała aplikacja notatek, która pamięta notatki.

Wcale nieźle.

Extra challenge: zapisywanie kontaktów

Utwórz plik:

contacts_file.py

Zbuduj program, który:

Prosty format pliku:

Anna,anna@example.com,123456
Marco,marco@example.com,987654

Przykładowy pomysł:

FILE_NAME = "contacts.txt"

def add_contact():
    name = input("Name: ")
    email = input("Email: ")
    phone = input("Phone: ")

    with open(FILE_NAME, "a") as file:
        file.write(f"{name},{email},{phone}\n")

    print("Contact saved.")

def show_contacts():
    try:
        with open(FILE_NAME, "r") as file:
            print("Contacts:")

            for line in file:
                parts = line.strip().split(",")

                if len(parts) == 3:
                    name = parts[0]
                    email = parts[1]
                    phone = parts[2]

                    print("-----")
                    print(f"Name: {name}")
                    print(f"Email: {email}")
                    print(f"Phone: {phone}")
    except FileNotFoundError:
        print("No contacts yet.")

while True:
    print("----- Contact Book -----")
    print("1. Add contact")
    print("2. Show contacts")
    print("q. Quit")

    choice = input("Choose an option: ").lower()

    if choice == "1":
        add_contact()
    elif choice == "2":
        show_contacts()
    elif choice == "q":
        print("Goodbye.")
        break
    else:
        print("Unknown option.")

Ten program zapisuje dane strukturalne w prostym formacie tekstowym.

Ważne:

line.strip().split(",")

To bierze linię taką jak:

Anna,anna@example.com,123456

i zamienia ją na:

["Anna", "anna@example.com", "123456"]

To bardzo użyteczny pomysł.

Później możesz nauczyć się lepszych formatów, takich jak JSON.

Ale na razie proste pliki tekstowe wystarczą.

Jeden krok naraz.

Nie trzeba jeszcze przywoływać smoka JSON.

Checklist dla początkujących

Kiedy kod z plikami nie działa, sprawdź:

Czy użyłem with open()?
Czy wybrałem poprawny tryb?
Czy przypadkiem użyłem "w" zamiast "a"?
Czy dodałem "\n" dla nowych linii?
Czy plik istnieje przed czytaniem?
Czy powinienem obsłużyć FileNotFoundError?
Czy użyłem strip() podczas czytania linii?
Czy uruchamiam Pythona z właściwego folderu?
Czy dobrze napisałem nazwę pliku?
Czy zapisałem plik po napisaniu kodu?

Błędy z plikami często są proste.

Ale irytujące.

Szczególnie problemy ze ścieżkami.

Jeśli Python mówi:

FileNotFoundError

nie panikuj.

Sprawdź:

nazwę pliku
folder
tryb
aktualny katalog

Najczęściej plik po prostu nie jest tam, gdzie Python go szuka.

Python jest surowy.

Nie przeszukuje całego komputera emocjonalnie.

Szuka tam, gdzie mu powiedziałeś.

Bardzo dosłownie.

Bardzo Python.

Podsumowanie

Dzisiaj nauczyłeś się:

To ogromny krok.

Twoje programy mogą teraz pamiętać rzeczy.

Mogą zapisywać dane.

Mogą ładować dane.

Mogą stać się bardziej użyteczne.

Tutaj małe skrypty zaczynają przypominać prawdziwe aplikacje.

Program z pamięcią jest dużo potężniejszy niż program, który wszystko zapomina.

Nawet jeśli ta pamięć to tylko mały tasks.txt.

Mały plik.

Duży upgrade.

Następna lekcja

W następnej lekcji nauczymy się podstawowej obsługi błędów.

Twoje programy nauczą się przetrwać problemy bardziej elegancko.

Na przykład:

użytkownik wpisuje tekst zamiast liczby
plik nie istnieje
dzielenie przez zero
zła opcja menu
brakujące dane

Zamiast crashować teatralnie, program będzie mógł odpowiedzieć spokojnie.

Bardzo użyteczne.

Bardzo dorosłe.

Bardzo Python.

Bo prawdziwi użytkownicy robią dziwne rzeczy.

A czasem prawdziwym użytkownikiem jesteś ty.

Szczególnie w nocy.