Python - zajęcia 8
1) Znikające dane
Napotkaliśmy problem podczas pisania kodów - znikające dane. Kiedy program przestaje działać nie pamięta już danych które dodaliśmy do np, książki kontaktów.
Podstawowym sposobem przechowywanie danych jest zapisywanie ich w plikach. Są one grupowane w folderach. Całość obsługiwana jest przez system plików (np. na Windows systemem plików jest NTFS).

2) Otwieranie plików w Pythonie
W najbardziej podstawowym wariancie robimy to w ten sposób:
plik_zawartosc = open("mojplik.txt", "r")
print(plik_zawartosc.read())
"r" - oznacza że otwieramy plik w trybie do odczytu (read), czyli nie będziemy wprowadzać do niego zmian.
Jeśli chcemy wyświetlić po kolei wiersze w danym pliku potrzebna jest pętla:
plik_zawartosc = open("mojplik.txt", "r")
for linijka in plik_zawartosc:
print(linijka)
3) Wczytanie z możliwością edycji
"w" - (write) otwiera plik do zapisu nadpisując istniejącą jego zawartość.
"a" - (append) otwiera plik do zapisu dodając nowe dane na końcu istniejącego pliku.
W obu przypadkach jeśli plik nie istnieje to zostanie on utworzony. Możemy dodać do nazwy trybu znak +
, co spowoduje, że będziemy mogli też odczytywać.
Następnie należy użyć metody .write()
aby dodać zawartość.
plik_zawartosc = open("mojplik.txt", "w")
plik_zawartosc.write("Nowa zawartość")
plik_zawartosc.close()
.close() - kończąc pracę z plikiem należy go domknąć. Jeśli nie domkniemy pliku a aplikacja np. wysypie się na skutek jakiegoś błędu może się okazać, że straciliśmy dane.
3) "with"
Dzięki with inaczej korzystamy z plików i nie trzeba pamiętać o domykaniu.
with open("mojplik.txt", "w") as plik_zawartosc:
plik_zawartosc.write("Nowa zawartość")
with open("mojplik.txt", "r") as plik_zawartosc:
print(plik_zawartosc.read())
4) Rodzaje plików
.txt, .csv, .json, .md (markdown), .py (python) to pliki tekstowe.
a) .csv - tabelka, która oddziela kolejne wiersze przecinkami, plik tekstowy

b) .json - plik tekstowy o innej strukturze

c) binarne
Niektóre pliki jednak przechowują dane w postaci binarnej (zerojedynkowej), dzięki czemu zajmują dużo mniej miejsca. Tak jest np. przy większości formatów do obrazków. Nie można ich otworzyć w notatniku. Przykładami są: .exe, .jpg, .png.
5) Formaty plików
Dobrze wiedzieć jak dane są zorganizowane. Nawet w formatach tekstowych można to zrobić w inny sposób np. zupełnie inaczej wyglądają pliki .json
i .csv
.
Jeśli nie wiemy jakiej zawartości się spodziewamy ciężko nam zamienić zawartość pliku na jakieś dane z których możemy skorzystać. Z pomocą przychodzą biblioteki - pomagają w serializacji/deserializacji danych.
6) Pliki JSON
with open("opole_weather.json", "r") as plik_zawartosc:
print(type(plik_zawartosc.read()))
Pokaże jakiego typu danych się spodziewamy
a) Import modułu .json
Moduł służy do pracy z danymi w formacie JSON.
import json
b) Wczytanie JSON-a
import json
with open("opole_weather.json", "r") as plik_zawartosc:
zawartosc = json.load(plik_zawartosc)
print(type(zawartosc))
Parsowanie JSON (przetwarzanie) - json.load(plik_zawartosc)
konwertuje zawartość pliku JSON na odpowiedni obiekt w Pythonie (np. słownik lub listę). Używamy print(type(zawartosc))
żeby wyświetlić ten typ danych.
U mnie w kodzie wyświetliły się dziwne znaczki przy znaku stopni Celsjusza, bo komputer użył złej tablicy do kodowania. Możemy mu to narzucić:
import json
with open("opole_weather.json", "r" , encoding="utf8") as plik_zawartosc:
zawartosc = json.load(plik_zawartosc)
print(type(zawartosc))
print(zawartosc)
c) Zapis JSON-a
Służy do tego funkcja dump z modułu json, z trybem w.
import json
moj_slownik = {"Jan" : "tel. 67584375", "Maria" : "discord mria56"}
with open("kontakty.json", "w", encoding="utf8") as mojedane:
json.dump(moj_slownik, mojedane)
Ten kod otwiera plik do zapisu kontakty.json
w trybie do zapisu ("w"). Dane będą w formacie UTF8. Zapisuje zawartość zmiennej moj_slownik
do pliku kontakty.json
w formacie JSON.
8) Kodowanie znaków
Kiedy pliki mają złe kodowanie na różnych etapach dodaje się kod, który zapisze nam w odpowiednim formacie wszystko.
• przy wczytywaniu
import json
with open("opole_weather.json", "r",encoding="utf8") as plik_zawartosc:
zawartosc = json.load(plik_zawartosc)
print(type(zawartosc))
print(zawartosc)
• przy zapisywaniu
import json
moj_slownik = {"Jan" : "tel. 67584375", "Maria" : "discord mria56"}
with open("kontakty.json", "w", encoding="utf8") as mojedane:
json.dump(moj_slownik, mojedane)
import json
dane = {"jabłka" : 4, "mango" : 3}
with open("plik_z_danymi.json", "w", encoding="utf8") as plik_json:
json.dump(
dane,
plik_json,
indent=4,
sort_keys=True,
ensure_ascii=False,
)
9) Przydatne biblioteki
- JSON – do obsługi plików
.json
- PyYAML – do obsługi plików
.yaml
- CSV – do tekstowego formatu dla tabelek
- Pandas – do wszelkiej maści plików przechowujących dane "tabelkowe" i do pracy z tymi danymi
10) Pliki CSV
import csv
with open("currency.csv", encoding="utf8") as mojplik:
tabelka = csv.reader(mojplik)
print(tabelka)
for wiersz in tabelka:
print(wiersz)
Kod na początku importuje moduł csv
, który pozwala na pracę z plikami w formacie CSV (Comma-Separated Values - wartości oddzielone przecinkami). Najpierw otwiera plik currency.csv w trybie odczytu ("r", jeśli nie podaliśmy to jest domyślny tryb).
tabelka = csv.reader(mojplik)
- Tu zmienna tabelka
przechowuje obiekt umożliwiający iterację po wierszach pliku CSV. Każdy wiersz jest przedstawiony jako lista elementów oddzielonych przecinkami.
Pętla używana jest do iteracji po wierszach for wiersz in tabelka:
. Każdy wiersz
jest wyświetlany za pomocą print(wiersz)
jako lista wartości.

11) Frameworki


