Lekcja 8 - Nikola Horn

Lekcja 8 - Nikola Horn
Photo by Branden Skeli / Unsplash

Książka telefoniczna z zapisem/odczytem JSON

import json

ksiazka_tele = {}

while True:
    # Zapytanie o wybranie operacji
    operacja = input(
        "Wybierz operację do wykonania:\n\
                  1 - dopisanie pozycji do książki\n\
                  2 - aktualizacja pozycji książki\n\
                  3 - usunięcie pozycji książki\n\
                  4 - wydruk imion z książki\n\
                  5 - wydruk całej książki telefonicznej\n\
                  6 - wczytaj książkę z pliku\n\
                  7 - zapisz książkę do pliku\n\
                  8 - koniec programu\nPodaj kod operacji = "
    )

    if not operacja:
        break

    # Wykonanie wybranej operacji
    if operacja == "1":
        print("Wybrano 1")
        imie = input("Wpisz imię i nazwisko: ")

        #Sprawdzenie czy imię już istnieje
        if imie in ksiazka_tele:
            print("Taki wpis już istnieje.")
        else:
            telefon = input("Wpisz numer telefonu: ")
            ksiazka_tele[imie]=telefon

    elif operacja == "2":
        print("Wybrano 2")
        aktualizuj = input("Jaki wpis chcesz zaktualizować? Podaj imię i nazwisko: ")
        
        #Sprawdzenie czy istnieje taki wpis
        if aktualizuj not in ksiazka_tele:
            print("Taki wpis nie istnieje.")
        else:
            ksiazka_tele.pop(aktualizuj)
            ksiazka_tele[(input("Wpisz aktualne imię i nazwisko: "))]=(input("Wpisz aktualny numer telefonu: "))

    elif operacja == "3":
        print("Wybrano 3")
        usun = (input("Jaki wpis chcesz usunąć? Podaj imię i nazwisko: "))
        ksiazka_tele.pop(usun)

    elif operacja == "4":
        print("Wybrano 4")
        
        #Drukowanie samych kluczy (ładnie)
        for klucz in ksiazka_tele.keys():
            print(klucz)

    elif operacja == "5":
        print("Wybrano 5")
        
        #Drukowanie par klucz-wartość (ładnie)
        for klucz, wartosc in ksiazka_tele.items():
            print(klucz, wartosc)

    elif operacja == "6":
        with open("ksiazka.json") as plik:
            ksiazka_tele = json.load(plik)
            print(ksiazka_tele)
    
    elif operacja == "7":   
        with open("jsonksiazka.json", "w", encoding = "utf8") as plik:
            json.dump(ksiazka_tele, plik, indent=2, ensure_ascii=False)
    
    elif operacja == "8":
        break

    else:
        print("\nPodano błędny kod operacji")



# Koniec programu
print("\nKoniec programu")

Odczytywanie CSV

import csv

with open("currency.csv", "r", encoding="utf8") as plik:
    reader = csv.reader(plik)

    print (reader)

    for wiersz in reader:
        print (wiersz)

Odczytywanie .txt

with open("zadanie.txt", "r") as plik_zawartosc:
    print(plik_zawartosc.read())
    for linijka in plik_zawartosc:
        print(linijka)

Notatki z zajęć

Snake case - przyjęło się używać go do nazw zmiennych w Pythonie - nazwa_zmiennej

Snake Case VS Camel Case VS Pascal Case VS Kebab Case – What’s the Difference Between Casings?
As a software engineer, you may be familiar with the following quote by Leon Bambrick: “There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.” Indeed, naming things when programming can be challengin…

PEP8 - Style Guide for Python Code

PEP 8 – Style Guide for Python Code | peps.python.org
This document gives coding conventions for the Python code comprising the standard library in the main Python distribution. Please see the companion informational PEP describing style guidelines for the C code in the C implementation of Python.

Pliki

Pliki grupowane są w folderach, a całość obsługiwana jest przez system plików (np. na Windowsie domyślnym systemem jest NTFS)

cd .. -> przechodzi folder wyżej

cd Kurs-Python - > przechodzi do folderu o podanej nazwie

cd. - zostaje w tym samym folderze

cd - change directory

Otwieranie plików w Pythonie

nasza_nazwa = open(nazwa_pliku, tryb)
plik_zawartosc = open("mojplik.txt", "r")
print (plik_zawartosc.read())

for linijka in plik_zawartosc:
print (linijka)

"r" - tryb tylko do oczytu

"w" - write - nadpisuje CAŁĄ zawartość pliku

"a" - append - dopisuje na końcu istniejących danych

plik_zawartosc.close()

zamknie plik

warto ZAWSZE zamykać pliki pod koniec pracy z nimi

With

with open("mojplik.txt","w") as plik_zawartosc:
  plik_zawartosc.write("blabla")

context manager - sam nam zrobi na końcu .close()

Formaty plików

Do najpopularniejszych formatów plików istnieją gotowe biblioteki, np. do docx, pdf etc.

pypi.org
PyPI · The Python Package Index
The Python Package Index (PyPI) is a repository of software for the Python programming language.

Formaty, które warto znać:

  • JSON - JavaScript Object Notation
  • YAML -
  • .csv

Przydatne biblioteki:

  • JSON
  • PyYAML
  • CSV
  • Pandas

JSON

import json

slownik = {"Maria" : "1111", "Tadeusz" : "2222"}

print(json.dumps(slownik, indent=4))

indent=x - tworzy wcięcie

json.dumps - zamieni słownik na obiekt tekstowy/string sformatowany jak JSON

with open("jsonsave.json","w") as plik:
  json.dumps(slownik, plik, indent=2)

to stworzy nam nowy plik, w którym będzie nasz słownik

json.dump - zrzuca content słownika do pliku

CSV

import csv

with open("currency.csv", "r", encoding="utf8") as plik:
    reader = csv.reader(plik)

    print (reader)

    for wiersz in reader:
        print (wiersz)

z użyciem biblioteki csv

import pandas as pd

mydataframe = pd.read_csv("currency.csv")
print(mydataframe)

z użyciem pandas

Pandas

Pandas is a Python library used for working with data sets. It has functions for analyzing, cleaning, exploring, and manipulating data. The name "Pandas" has a reference to both "Panel Data", and "Python Data Analysis
10 minutes to pandas — pandas 2.2.2 documentation
Pandas gives you answers about the data. Like:
- Is there a correlation between two or more columns?
- What is average value?
- Max value?
- Min value?
Pandas are also able to delete rows that are not relevant, or contains wrong values, like empty or NULL values. This is called cleaning the data.