Python - zajęcia 8

Python - zajęcia 8

  • obsługa plików
  • ścieżki i typy plików
  • boblioteki os, json

The AI workspace that works for you. | Notion
A tool that connects everyday work into one space. It gives you and your teams AI tools—search, writing, note-taking—inside an all-in-one, flexible workspace.

Notatki z zajęć

Zadania


✏️
Książka telefoniczna

import json
import os


# imie / pseudonim
# dane kontaktowe (dowolne - tel, / email)
# dodawanie, aktualizacja, usuwanie
# wybor dziwnego wariantu

kontakty = {}
SCIEZKA_PLIKU = "plik_z_kontaktami.json"
LICZBA_KONTAKTÓW_START = 0

if os.path.exists(SCIEZKA_PLIKU) and os.path.getsize(SCIEZKA_PLIKU) > 0:
    print("\n\n[i]\nZaczytuję istniejący plik z kontaktami.")
    # def wczytanie_pliku_kontaktow():
    with open(SCIEZKA_PLIKU, "r", encoding="utf8") as plik_kontaktow:
        # return kontakty
        kontakty = json.load(plik_kontaktow)
        LICZBA_KONTAKTÓW_START = len(kontakty)
        print(f"Ilość zaimportowanych: {LICZBA_KONTAKTÓW_START} \n")

elif not os.path.exists(SCIEZKA_PLIKU):
    with open(SCIEZKA_PLIKU, "r", encoding="utf8") as plik_kontaktow:
        print(f"\n\n[i]\nUtworzono plik do zapisu bazy kontaktów.\n")
else:
    print("\n\n[i]\nPlik z kontaktami jest pusty.\n")

# Dodawanie wpisu
# === 1 ===


def dodawanie_kontaktu():
    pseudonim = input("Podaj pseudonim:\n")
    if pseudonim in kontakty.keys():
        print("Kontakt istnieje. kolejnym razem podaj inny pseudonim")
    else:
        dane_kontaktowe = input("Podaj dane kontaktowe:\n")
        kontakty[pseudonim] = dane_kontaktowe
        print(
            "\n\n[i]\nDodano do kontaktów nowy wpis\n")


# Aktualizacja wpisu
# === 2 ===
def aktualizacja_wpisu():
    # Wyszukiwanie po nazwie
    szukany_pseudonim = input(
        "Podaj nazwę konktaktu, który chcesz zaktualizować:\n")
    if szukany_pseudonim in (kontakty.keys()):
        # Zakładam, że użytkownik może chcieć zmienić albo nazwę albo dane kontaktowe.
        czy_zmiana_nazwy = input("Chcesz zmienić nazwę? (T/N)\n")
        if czy_zmiana_nazwy == "T":
            nowy_pseudonim = input("Podaj nową nazwę:\n")
            kontakty[nowy_pseudonim] = kontakty.pop(szukany_pseudonim)
            print(
                "\n\n[i]\nZmieniono nazwę kontaktu\n")
        else:
            czy_zmiana_danych = input(
                "Chcesz zmienić dane kontaktowe? (T/N)\n")
            if czy_zmiana_danych == "T":
                nowe_dane = input("Podaj nowe dane:\n")
                kontakty[szukany_pseudonim] = nowe_dane
                print("\n\n[i]\nZaktualizowano wpis\n")
    else:
        print("Nie znaleziono kontaktu o tej nazwie.")


# Usunięcie wpisu
# === 3 ===
def usuniecie_wpisu():
    szukany_pseudonim = input("Podaj nazwę konktaktu, który chcesz usunąć:\n")
    if szukany_pseudonim in (kontakty.keys()):
        print("Czy na pewno chcesz usunąć kontakt? (T/N)\n")
        # decyzja = input()
        # if decyzja == 'T':
        #     kontakty.pop(szukany_pseudonim)
        #     print(f"\n\n[i]\nUsunięto wpis z kontaktów\n")
        for pseudonim, dane_kontaktowe in kontakty.items():
            if pseudonim == szukany_pseudonim:
                print(f"{pseudonim}: {dane_kontaktowe}")
        decyzja = input()
        if decyzja == 'T':
            kontakty.pop(szukany_pseudonim)
            print(
                "\n\n[i]\nUsunięto wpis z kontaktów\n")

    else:
        print("\n[X]\nNie znaleziono kontaktu o tej nazwie.")


# Wydruk wszystkich kontaktow
# === 4 ===
def wydruk_wszystkich_kontaktow():
    for pseudonim, dane_kontaktowe in kontakty.items():
        print(f"{pseudonim}: {dane_kontaktowe}")
    print("\n")


# Wydruk wybranego kontaktu
# === 5 ===
def wydruk_wybranego_kontaktu():
    szukany_pseudonim = input("Podaj szukaną nazwę kontaktu:")

    if szukany_pseudonim in (kontakty.keys()):
        for pseudonim, dane_kontaktowe in kontakty.items():
            if pseudonim == szukany_pseudonim:
                print(f"{pseudonim}: {dane_kontaktowe}")
    else:
        print("Nie znaleziono kontaktu o tej nazwie.")


# Zapis kontaktów do pliku
# === 6 ===
def zapis_kontaktow_do_pliku():
    with open(SCIEZKA_PLIKU, "w", encoding="utf8") as plik:
        # i tu słowniki są genialne bo nie będę iała dwa razy tego samego kllucza, czyli kontaktu <3
        json.dump(kontakty, plik, indent=4, sort_keys=True, ensure_ascii=False)


# Zapis kontaktów do pliku
# === 7 ===
def czy_zapisać_dane():
    if LICZBA_KONTAKTÓW_START != len(kontakty):
        czy_zapisac = input(
            "\n\n[?]\nDokonano zmian.\nCzy chesz je zapisać przed wyjściem(T/N)?\n")
        if czy_zapisac == 'T':
            zapis_kontaktow_do_pliku()


while True:
    print("Książka kontaktowa:")
    print("Wybierz operację:")
    print("1 - dodanie wpisu")
    print("2 - aktualizacja wpisu")
    print("3 - usunięcie wpisu")
    print("4 - wydruk wszystkich kontaktów")
    print("5 - wydruk konretntego kontaktu")
    print("6 - zapisz kontakty do pliku")
    print("7 - koniec programu")

    wybor = input("Podaj kod operacji: ")

    if wybor == "1":

        print("""
              
              ===== Dodanie wpisu =====
              """)
        dodawanie_kontaktu()

    elif wybor == "2":
        print("""
              
              ===== Aktualizacja wpisu =====
              """)
        aktualizacja_wpisu()
    elif wybor == "3":
        print("""
              
              ===== Usunięcie wpisu =====
              """)
        usuniecie_wpisu()
    elif wybor == "4":
        print("""
              
              ===== Wydruk wszystkich kontaktów =====
              """)
        wydruk_wszystkich_kontaktow()
    elif wybor == "5":
        print("""
              
              ===== Wydruk danych kontaktu =====
              """)
        wydruk_wybranego_kontaktu()
    elif wybor == "6":
        print("""
              
              ===== Zapisano kontakty do pliku =====
              """)
        zapis_kontaktow_do_pliku()
    elif wybor == "7":
        czy_zapisać_dane()
        print("Koniec programu")
        break
    else:
        print("Nie ma opcji o podanym kodzie.")
  • tutaj mała gwiazdka i wytłumaczenie się.... ;)
    Nie wiem czemu mielibyśmy podmieniać cały plik? To, że przechowywane dane są w postaci słownika nie pozwala na nadanie tego samego klucza więc możemy dopisywać nasze "kontakty" w całości.
✏️
Quiz
# 🔹 Lista pytań w formie słowników
import random
import json
import os
 

with open("dane\kwestionariusz.json", "r", encoding="utf8") as plik_z_pytaniami:
    quiz = json.load(plik_z_pytaniami)

# sciezka = os.path.join("podkatalog", "kontakty.json")
# os.makedirs("podkatalog", exist_ok=True)
# print(f"Katalog '{sciezka}' jest dodany.")
# with open(sciezka, "w", encoding="utf8") as plik_z_pytaniami:
#     json.dump(quiz, plik_z_pytaniami)



# --> wyciągnięcie pytania
print(quiz[0]["pytanie"])