Przetwarzanie i wizualizacja danych - lab
Przetwarzanie i wizualizacja danych
Zajecia wstepne
Paweł Kedzierski
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Tematy
1 Podstawy Pythona (wersja 3)
podstawowe typy danych
instrukcje sterujace (if, for, while)
zródła danych i wyprowadzanie wyników, czyli “wejscie” i
“wyjscie”: funkcja input(), operacje na plikach, argumenty linii
komend.
formatowanie wyników: tabele, arkusze CSV
2 Przetwarzanie danych
wczytywanie danych z plików tekstowych
parsowanie tekstu (wyszukiwanie danych wg wzorca)
macierze Numerical Pythona (= numpy)
obliczenia z wykorzystaniem modułu numpy
3 Wizualizacja wyników za pomoca bibliotek Pythona
moduł matplotlib
moduł PIL (opcjonalnie)
moduł VTK (raczej na 5,5)
4 Obróbka grafiki w programach GIMP i Inkscape (?)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Zasady zaliczenia
Zaliczenie na podstawie indywidualnych zadan
System punktowy
Liczba punktów za zadanie rózna, zalezna od wkładu pracy i
skomplikowania zadania
Ocena celujaca (5,5) za punkty na 5,0 plus umiejetnosci nie
przerabiane na zajeciach
Uzyskane punkty Ocena koncowa
15-17,99 3,0
18-20,99 3,5
21-23,99 4,0
24-26,99 4,5
27-30 5,0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Zasady zaliczenia - detale
Podział punktów:
Podstawy Pythona 10 punktów
w tym „kartkówki” 3 punkty
Przetwarzanie danych i obliczenia 10 punktów
w tym „kartkówki” 3 punkty
Wizualizacja danych w Pythonie (wykresy, obrazy) 10 punktów
w tym „kartkówki” 3 punkty
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Zasady zaliczenia - detale
„Kartkówki” beda na zajeciach (niekoniecznie na kartkach).
Pozostałe punkty (21) beda rozłozone na indywidualne zadania,
do wykonania (lub dokonczenia, w miare czasu) w domu.
Ocena programów: dopóki program nie działa (od razu po
uruchomieniu jest bład albo nic nie robi) - jest warty 0 punktów.
Zadanie oddane po terminie jest oceniane na 0 punktów.
Aktywnosc na zajeciach (plusy) - umozliwiaja podniesienie oceny
koncowej o 0,5.
Poprawy: dodatkowe (inne) zadanie na koniec semestru
(uproszczone, tylko z 2,0 na 3,0)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Zasady zaliczenia - detale
Na ocene celujaca 5,5 (czyli przykłady tego co wykracza za program
kursu):
Graficzny interfejs uzytkownika (GUI, np. w Tkinter, wxPython,
pyQt etc.);
Programy odporne na błedy, czyli z dobra obsługa wyjatków;
Pełne wykorzystanie programowania obiektowego, czyli
tworzenie własnych klas, implementacja operatorów itp.
Inne (nietrywialne) rozszerzenia wymagajace samodzielnej nauki
(np. matplotlib i VTK to tematy-morza :).
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Plan na dzis
1 Czym jest program (z punktu widzenia systemu operacyjnego)
2 Gdzie system szuka programów
3 Uruchamianie własnych programów
4 Pierwszy program w Pythonie
Linux Windows
1© Prawo dostepu do wykonywania (x) Rozszerzenie (ukryte!) = typ
-rwxr-x--- .exe – programy binarne
chmod +x program .bat .py – skrypty
ls -l dir
2© Zmienna srodowiska PATH
echo $PATH echo %PATH%
Tylko katalogi z PATH (!) najpierw roboczy, potem PATH
3© ./program.py program.py
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Plan na dzis
Pierwszy program w Pythonie
Jak poinformowac system, ze to Python?
Linux Windows
4© Pierwsza linia:
#!/usr/bin/env python3
Rozszerzenie .py oznacza
„uruchom w terminalu (cmd) za
pomoca Pythona”.
Rozszerzenie .pyw oznacza
„uruchom za pomoca Pythona,
bez terminala” (program musi
miec GUI).
Kilka wersji Pythona wymaga
instalacji Python Launcher i
wtedy honorowana jest wer-
sja podana w pierwszej linii
skryptu.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Linia komend w Windows
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Linia komend w Windows
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Przetwarzanie i wizualizacja danych
Typy danych
Paweł Kedzierski
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Stałe, zmienne i wyrazenia
stała wartosc wpisana w program, jak liczby 1, 3.14 albo
napisy "Ala ma Asa". Jej zmiana wymaga
poprawienia programu.
zmienna nazwa, pod która pamietamy jakas wartosc. W tej
samej zmiennej program moze przechowywac rózne
wartosci danych, które przetwarza.
wyrazenie zapis, którego wartosc (wynik) komputer musi obliczyc
przed uzyciem. Moze to byc wzór arytmetyczny (np.
x+1), wywołanie funkcji która daje jakis wynik (np.
sin(x)) i ich kombinacje.
Wszedzie tam, gdzie mozna uzyc jakiejs wartosci (stałej),
mozna równiez uzyc zmiennej lub wyrazenia.
Formalnie rzecz biorac, stałe i zmienne to równiez wyrazenia.
Zapis wyrazen wymaga zwykle operatorów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Operatory
Najwazniejsze operatory:
= przypisanie zmiennej (po lewej) jakiejs wartosci (z prawej)
+ dodawanie (liczb, sekwencji, . . . )
- odejmowanie (dwuargumentowy), zmiana znaku (jednoargumentowy)
* mnozenie (liczb, sekwencji przez liczbe całkowita)
** podniesienie do potegi (np. x**0.5 top
x)
/ dzielenie rzeczywiste (Python 3)
// dzielenie całkowite (bez reszty)
% reszta z dzielenia całkowitego, formatowanie napisów
+= zwiekszenie zmiennej (po lewej) o wartosc po prawej
-= zmniejszenie zmiennej (po lewej) o wartosc po prawej
() pierwszenstwo obliczen, wywołanie funkcji
Jeszcze operatory logiczne - o tym za chwile. . .
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: liczby
Podstawowe dane liczbowe zapisujemy raczej intuicyjnie, ale z
uzyciem kropki dziesietnej (nie przecinka). Jednak warto znac
wszystkie mozliwe typy i notacje:
int Liczby całkowite:
Notacja dziesietna: 1 12 123
Notacja ósemkowa (octal): 0o1 0o14 0o173
(na poczatku zero, za nim litera „o”)
Notacja szesnastkowa (hex): 0x1 0xC 0x7B
float Liczby rzeczywiste (zmiennoprzecinkowe):
Notacja dziesietna: 1.0 .5 1300
Notacja naukowa (wykładnicza): 1e0 5E-1 1.3e3
complex Liczby zespolone
Jako suma, z czescia urojona oznaczona
dopiskiem j: 2j 1e10+.5j 1-3E-4J
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: Typ logiczny i warunki logiczne
Typ logiczny (nazwa Pythona: bool) ma tylko dwie wartosci: True
(prawda) i False (nieprawda).
Zamiast wartosci True mozna uzyc dowolnej wartosci niezerowej i
niepustej (w tym sekwencji), a zamiast False mozna uzyc liczby zero,
danej pustej – np. sekwencji bez elementów, oraz wartosci specjalnej
None.
Wynik typu bool daja m.in. operatory porównania:
== sprawdzenie równosci (nie mylic z operatorem przypisania!)
!= sprawdzenie nierównosci
< czy lewa strona jest mniejsza niz prawa
> czy lewa strona jest wieksza niz prawa
<= mniejsze lub równe
>= wieksze lub równe
or czy którakolwiek strona jest prawdziwa (spełniona)
and czy obie strony sa prawdziwe (spełnione)
not zaprzeczenie warunku po prawej (jednoargumentowy)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: napisy
W Pythonie 2 typ str jest uzywany zarówno do danych tekstowych,
jak i binarnych (ciagów bajtów).
W Pythonie 3, dane typu str zawsze sa znakami Unikodu i słuza do
komunikacji z człowiekiem. Do operacji na ciagach bajtów słuzy typ
bytes.
str Od „string of characters”. W Pythonie 2 to ciag bajtów,
w Pythonie 3 ciag znaków Unicode. Zapis:
W apostrofach lub cudzysłowach: ’Ala’ "Ola"
j.w. ale w potrójnych: ’’’Moga zawierac ’to’
i "to"
i wiele linii’’’bytes sekwencja bajtów (widoczna jako znaki ASCII),
oznaczona przedrostkiem „b”: b’Ala’ b"Ola"
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: napisy
Cechy napisów:
Znaki specjalne wewnatrz napisów mozemy podawac po
odwrotnym ukosniku, np.
\n koniec linii
\t tabulacja
\\ znak (jednego) odwrotnego ukosnika
\xFF znak o kodzie szesnastkowym FF: ÿ
\u20AC znak o kodzie Unicode-16 20AC: C
\N{EURO SIGN} znak o nazwie Unicode „EURO SIGN”: C
Przedrostek r (od „raw”) wyłacza specjalna funkcje znaku \
Kilka napisów podanych po odstepach jest łaczonych w jeden:
>>> napis = "Ala" ’ ’ "ma" ’kota’
>>> print(napis)
Ala makota
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: sekwencje
Cechy wspólne sekwencji:
Sekwencje to „pojemniki” na wiele elementów (danych).
Elementy zachowuja kolejnosc i sa ponumerowane
(indeksowane) od zera
Mozna wybrac z sekwencji element o podanym numerze
(indeksie)
Indeksy podajemy po sekwencji, w nawiasach kwadratowych:
sekwencja[2] → element o numerze 2
Indeksy ujemne sa liczone od konca sekwencji:
sekwencja[-1] → ostatni element
sekwencja[-2] → przedostatni element etc.
Liczbe elementów kazdej sekwencji (jej długosc) liczy funkcja
len(sekwencja)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: sekwencje
Cechy wspólne sekwencji c.d.:
Mozemy wybierac fragmenty po kilka elementów (ang. slices).
W tym celu, podajemy zakres indeksów:
sekwencja[od:do] → sekwencja od elementu numer od
(włacznie) do elementu numer do (wyłacznie)
sekwencja[od:do:co ile] → elementy od od (włacznie)
do do (wyłacznie), z odstepem co ile.
Indeksy domyslne (np. [::]) – od poczatku, do konca, co 1.
Zakres sekwencji jest tego samego typu co sekwencja, z której
wybieramy.
Za duze/za małe indeksy w zakresach nie powoduja błedu – tylko
wynik jest pusty.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: sekwencje
Zakresy sekwencji (na przykładzie napisów):
>>> ’abcde’[1:4]
’bcd’
>>> ’abcde’[1:-1]
’bcd’
>>> ’abcde’[:]
’abcde’
>>> ’abcde’[::2]
’ace’
>>> ’abcde’[::-1]
’edcba’
>>> ’abcde’[100:120]
’’
1 2 3 4 50
len(s)
' 's= a b c d e
1:4[ ]
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Inne sekwencje
Elementami napisów moga byc jedynie znaki tekstowe. Inne
sekwencje moga przechowywac dowolne elementy:
tuple W jezyku polskim uzywane sa nazwy tupla (kalka z
ang.) i krotka, choc najlepsze tłumaczenie to chyba ciag.
Zapisujemy ja jako elementy po przecinkach, w
nawiasach okragłych (nawiasy czasem mozna
pominac):
() pusta tupla
(3,) tupla z jednym elementem (przecinek!)
(’a’, .5, ()) tupla z 3 elementami róznych typów
list Lista. Zapisujemy w nawiasach kwadratowych:
[] pusta lista
[3] lista z jednym elementem
[’a’, .5, ()] lista z 3 elementami róznych typów
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: operacje na sekwencjach
>>> N = ’Ala’
>>> T = (1, ’a’, [])
>>> L = [3, 2, 1]
Wszystkie sekwencje mozna mnozyc przez liczby całkowite:
N * 4 → ’AlaAlaAlaAla’
2 * T → (1, ’a’, [], 1, ’a’, [])
L * 3 → [3, 2, 1, 3, 2, 1, 3, 2, 1]
L * -1 → []
B ’cos’ * 1.5 → TypeError: M
Sekwencje tego samego typu mozna dodawac:
N + " M." → ’Ala M.’
T + T → (1, ’a’, [], 1, ’a’, [])
B T + L → TypeError: M
Operator in sprawdza, czy wartosc jest elementem sekwencji:
2 in L → True
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: róznice miedzy sekwencjami
>>> N = ’Ala’
>>> T = (1, ’a’, [])
>>> L = [3, 2, 1]
Elementy list mozna dowolnie zmieniac (ang. Mutable type):
L[0] = N → [’Ala’, 2, 1]
del L[2] → [’Ala’, 2]
Tupli i napisów nie mozna modyfikowac (ang. Immutable type):
B N[0] = ’B’ → TypeError: M
B T[0] = 2 → TypeError: M
B del T[0] → TypeError: M
Operator in działa dla wszystkich sekwencji, ale tylko dla
napisów pozwala na sprawdzenie obecnosci ciagu znaków:
[3,2] in L → False
’la’ in N → True
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: metody
Funkcje „wbudowane” w okreslony typ danych nazywamy metodami.
Wywołujemy je uzywajac składni obiekt.funkcja() w
przeciwienstwie do zwykłych funkcji, które wywołujemy funkcja().
Metody maja bezposredni dostep do danych obiektu, do którego
naleza (np. do elementów listy).
Zawsze mozna sprawdzic, jakie wbudowane funkcje (metody) ma
obiekt, i do czego słuza:
>>> dir([])
[... ’append’, ’clear’, ’copy’, ’count’, ’extend’,
’index’, ’insert’, ’pop’, ’remove’, ’reverse’, ’sort’]
>>> help([].clear)
Help on built-in function clear:
clear(...) method of builtins.list instance
L.clear() -> None - remove all items from L
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: metody list
Tylko metody list copy(), count(), index() i pop() daja w wyniku
jakas wartosc. Pozostałe zmieniaja bezposrednio zawartosc listy, dla
której zostały uzyte.
L.append(e) → Dopisuje element e na koniec listy L
L.clear() → Usuwa wszystkie elementy z L
L.copy() → Wynikiem tej funkcji jest kopia listy L
L.count(e) → Wynikiem tej funkcji jest ile „sztuk” elementu e jest
na liscie L
L.extend(S) → Przepisuje elementy z innej sekwencji S na koniec
L
L.index(e) → Wynikiem jest indeks elementu e na liscie L. Jesli
L nie zawiera e, efektem bedzie bład ValueError
L.insert(i,e) → Wstawia wartosc e na liste L pod indeks i. Istnie-
jace za i elementy sa przesuniete.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: metody list
L.pop() → Wynikiem tej metody jest ostatni element listy L,
który jednoczesnie jest usuniety z L. Jesli L jest
pusta, efektem jest bład IndexError.
L.pop(i) → Wybiera i kasuje z L element o podanym indek-
sie i.
L.remove(e) → Usuwa z listy L pierwsze wystapienie elementu e.
Bład ValueError, jezeli w L nie ma e.
L.reverse() → Odwraca kolejnosc elementów (od ostatniego do
pierwszego) na liscie L. W przeciwienstwie do za-
kresu L[::-1], nie tworzy kopii.
L.sort() → Sortuje (porzadkuje w kolejnosci rosnacej) ele-
menty na liscie L. Kolejnosc malejaca uzyskamy
instrukcja: L.sort(reverse=True)
Wprawdzie tylko listy maja metode sort(), ale jest równiez funkcja
standardowa sorted(S) która działa na dowolnej sekwencji S (i nie
tylko), i której wynikiem jest juz posortowana lista.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: metody napisów
Napisy sa w Pythonie stałe (niemutowalne), lecz przetwarzanie danych
tekstowych umozliwia bogactwo metod wbudowanych w typ napisowy:
capitalize center count encode
endswith expandtabs find index
isalnum isalpha isdecimal isdigit
isidentifier islower isnumeric isprintable
isspace istitle isupper join
ljust lower lstrip replace
rfind rindex rjust rstrip
split splitlines startswith strip
swapcase title upper ...
Prosze sie zapoznac równiez z tymi nie testowanymi na zajeciach.
Przeczytac help("".metoda) i potestowac samodzielnie!
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: metody napisów
W przeciwienstwie do list, metody operujace na napisach zawsze daja
jakis wynik. Nie moga zmieniac znaków napisu, dla którego sa
uruchamiane (bo jest immutable), wiec produkuja nowe, zmienione
napisy. Dlatego wynik trzeba zapamietac w zmiennej.
S = ’aaa bbb CCC’
S.capitalize() → ’Aaa bbb ccc’
S.isalpha() → True
S.center(15) → ’ aaa bbb CCC ’
S.split() → [’aaa’, ’bbb’, ’CCC’]
S.join([’-’,’+’]) → ’-aaa bbb CCC+’
S.replace(’aa’,’X’) → ’Xa bbb CCC’
’ abc\n’.strip() → ’abc’
W jednej instrukcji mozna uzyc kilku metod po sobie, o ile wynikiem
poprzednich jest napis. Na przykład:
napis = napis.strip().capitalize().center(60)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Porównywanie wartosci róznych typów
Porównywanie „wieksze”, „mniejsze” wymaga w Pythonie 3
zgodnosci typów, inaczej wywołuje błedy:
(1,) < [2] → TypeError: unorderable types
1 < ’2’ → TypeError: unorderable types
Mozna porównywac porzadek liczby całkowitych i rzeczywistych,
ale zespolonych nie:
1 < 1.1 → True
1j < 2j → TypeError: unorderable types
Znaki sa porównywane w kolejnosci numerów Unicode, nie
alfabetycznie:
’Z’ > ’a’ → False
Sekwencje tego samego typu porównywane sa element po
elemencie:’ala’ > ’alA’ → True
(1,2) < (1.0,3) → True
operatory > i < sa wykorzystywane przy sortowaniu.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Typy danych
Typy danych: jeszcze o metodach sekwencji
Metody count i index maja listy, tuple i napisy, z tym ze dla
napisów działaja one dla równiez dla fragmentów napisu
dłuzszych niz jeden znak.
Jezeli chcemy sprawdzic, w którym miejscu napis N zawiera ciag
znaków C, lepiej uzyc N.find(C). Wynikiem tej metody jest -1,
jesli C nie ma w N, natomiast N.index(C) spowoduje wtedy bład.
Metoda L.sort dla list oraz ogolna funkcja sorted wymagaja,
aby dane do uporzadkowania były typu dajacego sie porównac.
Mozna sortowac sekwencje napisów i sekwencje liczb, ale próba
posortowania danych napisowych wymieszanych z liczbowymi
skutkuje błedem TypeError.
Trzeba pamietac które metody zwracaja jakas wartosc, a które
nie (tylko zmieniaja swój obiekt) – bo inaczej sie ich uzywa!
lista.sort() vs ostatni = lista.pop()
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Przetwarzanie i wizualizacja danych
Instrukcje sterujace
Paweł Kedzierski
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Petla for
Cel Wykonaj „jakies instrukcje” dla kazdego elementu
e sekwencji sekwencja.
Składnia for e in sekwencja:
wciecie−−−−−−−−−→
jakies
instrukcje
Opis e to zmienna, która zostanie utworzona w petli for
(lub zmieniona, jesli istniała wczesniej).
dla kazdego elementu sekwencji sekwencja,
element ten zostanie „wstawiony” (przypisany) do
zmiennej e,
a nastepnie dla tej wartosci e zostana wykonane
wszystkie „jakies instrukcje”.
(takie samo) wciecie zaznacza, które instrukcje
naleza do tej konkretnej petli i beda powtórzone dla
kazdej wartosci e.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Petla for: przykłady
>>> for nr in 1,2,3:
... print(’nr =’, nr)
nr = 1
nr = 2
nr = 3
>>> for znak in ’XyZ’:
... print(znak)
X
y
Z
>>> for kto in [’Ala’,’Ola’]:
... print(kto)
Ala
Ola
>>> for x in [1,2,3]:
... for y in [1,2,3]:
... print(x*y,end=’ ’)
... print()
1 2 3
2 4 6
3 6 9
Parametr end=’ ’ funkcji
print powoduje, ze za
wypisywana informacja dodana
zostanie spacja. Domyslnie ten
argument jest koncem linii,
dlatego print() konczy linie i
przechodzi do nastepnej.Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Funkcja range()
Kiedy w petli for chcemy skorzystac nie tylko z elementów sekwencji,
ale tez z ich indeksów, przydaje sie funkcja range:
>>> S = (’Ala’, ’Ula’)
>>> for i in range(len(S)):
... print(i+1, S[i], sep=’) ’)
1) Ala
2) Ula
W Pythonie 2, wynikiem range(n) była zwykła lista n-elementowa,
zawierajaca indeksy (dla dowolnej sekwencji o długosci n).
W Pythonie 3, wynik funkcji range nie jest juz lista (dla efektywnosci)
ani nawet sekwencja. Formalnie, jest to tzw. iterator.
>>> r = range(5)
>>> type(r)
<class ’range’>
>>> print(r)
range(0, 5)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Funkcja range()
Wynik funkcji range mozna, w razie potrzeby, przekształcic na
sekwencje potrzebnego typu:
>>> list(range(5))
[0, 1, 2, 3, 4]
Działanie Funkcja range produkuje zakres indeksów (nadajacy
sie dla dowolnej sekwencji S). Mozna jej uzyc z jednym,
dwoma lub trzema argumentami całkowitymi.
range(n) Produkuje n liczb od 0 do n-1
range(od, do) Produkuje indeksy dla zakresu S[od:do]
range(od, do, co_ile) Produkuje indeksy jak dla zakresu
S[od:do:co_ile]
Najprostsze zastosowanie range to: „powtórz instrukcje n razy”
>>> for i in range(n):
... instrukcje
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Funkcja range() – przykłady
Za pomoca funkcji range mozna wygenerowac dowolny ciag
arytmetyczny liczb całkowitych. W kazdym przypadku, element
podany pierwszym argumentem (od) jest uwzgledniany, natomiast
koniec zakresu (do) – nie.
list(range(10)) → [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(1,6)) → [1, 2, 3, 4, 5]
list(range(0,10,2)) → [0, 2, 4, 6, 8]
list(range(-7,0)) → [-7, -6, -5, -4, -3, -2, -1]
list(range(5,-1,-1)) → [5, 4, 3, 2, 1, 0]
list(range(5,-10,-2)) → [5, 3, 1, -1, -3, -5, -7, -9]
(Tylko) dla ilustracji wyników, w kazdym przykładzie uzyto konwersji na
liste. W petli for takiej konwersji nie nalezy uzywac.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Instrukcja if
Cel Podjecie decyzji, który fragment programu wykonac
(zaleznie od warunków).
Składnia if warunek:wciecie
−−−−−−−−−→
jakies
instrukcje
Opis wciecie zaznacza, które instrukcje beda wykonane
pod warunkiem.
Fragment z wcieciem bedzie wykonany tylko wtedy,
gdy warunek jest prawdziwy (oczywiscie
instrukcje ponizej wcietego fragmentu wykonuja sie
normalnie).
if nie jest petla. Instrukcje z wcieciem beda
wykonane raz albo wcale.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Instrukcja if
Cel Podjecie decyzji, który fragment programu wykonac
(zaleznie od warunków).
Składnia if warunek:wciecie
−−−−−−−−−→
jakies
instrukcje
else:wciecie
−−−−−−−−−→
jeszcze inne
instrukcje
Opis wciecie zaznacza, które instrukcje beda wykonane
pod warunkiem, a które po else:.
Wykonany bedzie tylko ten fragment z wcieciem,
dla którego warunek jest prawdziwy. Jezeli nie
jest prawdziwy, wykonane beda instrukcje po else:.
if nie jest petla. Zostana wykonane instrukcje z co
najwyzej jednego wciecia, jeden raz albo wcale.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Instrukcja if
Składnia if warunek1:wciecie
−−−−−−−−−→
jakies
instrukcje
elif warunek2:wciecie
−−−−−−−−−→
inne
instrukcje
else:wciecie
−−−−−−−−−→
jeszcze inne
instrukcje
Opis Wykonany bedzie tylko ten fragment z wcieciem,
dla którego pierwszy w kolejnosci warunek jest
prawdziwy. Jezeli zaden nie jest prawdziwy,
wykonane beda instrukcje po else:.
Jezeli (zaden) warunek nie jest spełniony i nie ma
else:, instrukcja nie zrobi nic.
Mozna sprawdzic tak dowolnie wiele warunków.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Petla while
Cel Powtarzaj fragment programu pod zadanym warunkiem.
Składnia while warunek:wciecie
−−−−−−−−−→
jakies
instrukcje
Opis wciecie zaznacza, które instrukcje beda wykonane
pod podanym warunkiem.
Instrukcje z wcieciem beda powtarzane tak
długo, jak długo warunek pozostaje prawdziwy -
chyba, ze przerwiemy petle instrukcja break.
Musimy albo zmieniac warunek w petli, albo
umiescic w niej instrukcje break - inaczej petla
bedzie powtarzana w nieskonczonosc.
Jesli zdarzy nam sie napisac petle nieskonczona
(program sie „zawiesza” albo bez konca cos
powtarza), mozna go przerwac z klawiatury
klawiszami Ctrl-C.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Przykłady petli while
Zamiast petli for (choc nie polecam):
>>> n = 1 # zmienna do odliczania
>>> while n < 3: # powtarzaj, dopóki n jest mniejsze od 3
... print(n)
... n += 1 # zwiekszamy x - zmieniamy warunek powyzej
1
2
Czesto stosowany idiom: gdy dopiero wewnatrz petli pojawia sie dane,
które sa warunkiem zakonczenia:
>>> while True: # warunek zawsze prawdziwy
... x = float(input(’Podaj liczbe dodatnia: ’))
... if x > 0: break # warunek zakonczenia
Podaj liczbe dodatnia: -1
Podaj liczbe dodatnia: 0
Podaj liczbe dodatnia: 1e-3
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Przykłady petli while
Inny idiom: zbieranie danych do momentu, gdy sie skoncza (tj. próba
wczytania kolejnej danej daje pusty wynik):
ludzie = [] # lista na dane
while 1: # znaczy: zawsze
ktos = input(’Kolejna osoba: ’) # wprowadzanie danych
if ktos == ’’: break # warunek zakonczenia
lista.append(ktos) # zapamietaj dana
print(lista)
Kolejna osoba: Ala
Kolejna osoba: Ola
Kolejna osoba: Ula
Kolejna osoba:
[’Ala’, ’Ola’, ’Ula’]
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Podsumowanie petli
Petli for uzywamy, gdy mamy sekwencje danych do
przetworzenia, albo gdy chcemy wykonac jakis fragment
programu z góry zadana liczbe razy (z funkcja range).
Petli while uzywamy, gdy potrzebna liczba powtórzen zalezy od
jakiegos warunku.
Kazda petle (for i while) mozna przerwac za pomoca instrukcji
break, której zwykle wykonujemy pod jakims warunkiem, czyli:
if warunek: break
Jest równiez instrukcja continue, która pomija nalezace do petli
instrukcje ponizej niej, ale nie konczy petli - tylko przechodzi do
jej kolejnego wykonania, od pierwszej linijki wciecia.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Podsumowanie instrukcji sterujacych
Wciecia sa elementem składni Pythona, decyduja o tym który
fragment programu nalezy do której instrukcji sterujacej. Dlatego
błedem jest zarówno wciecie bez powodu, jak i nierówne wciecia
- nie mozna m.in. mieszac spacji i tabulacji.
Jesli pod kontrola instrukcji sterujacej ma byc tylko jedna
instrukcja, mozna ja umiescic w tej samej linii, zaraz po
dwukropku (jest to wyjatek od wciec). Przykłady:
if x > 0: print(’x jest dodatnie’)
for nr in range(1,11): print(nr)
while L: print(L.pop())
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Instrukcje sterujace
Podsumowanie instrukcji sterujacych
Wciecia sa elementem składni Pythona, decyduja o tym który
fragment programu nalezy do której instrukcji sterujacej. Dlatego
błedem jest zarówno wciecie bez powodu, jak i nierówne wciecia
- nie mozna m.in. mieszac spacji i tabulacji.
Jesli pod kontrola instrukcji sterujacej ma byc tylko jedna
instrukcja, mozna ja umiescic w tej samej linii, zaraz po
dwukropku (jest to wyjatek od wciec). Przykłady:
if x > 0: print(’x jest dodatnie’)
for nr in range(1,11): print(nr)
while L: print(L.pop())
Szczególnym przypadkiem zastosowania instrukcji sterujacych
sa listy iterowane (tu nie ma ani dwukropków, ani wciec):
T L1 = [ x*0.1 for x in range(11) ]
L2 = [ x**0.5 for x in range(-3,6) if x > 0 ]
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab
Przetwarzanie i wizualizacja danych
Wybrane tematy z podstaw Pythona
Paweł Kedzierski
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Wiekszosc funkcji dostepnych w jezyku Python nie jest
„wbudowana” w interpreter i wymaga załadowania przed uzyciem.
Funkcje i klasy rozszerzajace mozliwosci jezyka sa
zaprogramowane w osobnych plikach, tzw. bibliotekach albo
modułach.
Moduły Pythona moga byc napisane w innym jezyku
programowania (zwykle C), skompilowane i dostepne w postaci
plików binarnych (typu .DLL w Windows lub .so w Linux).
Zwykły kod Pythona w pliku z rozszerzeniem .py równiez jest
modułem – łatwo jest wiec tworzyc własne (co jednak wymaga
min. umiejetnosci pisania funkcji).
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Wiekszosc funkcji dostepnych w jezyku Python nie jest
„wbudowana” w interpreter i wymaga załadowania przed uzyciem.
Funkcje i klasy rozszerzajace mozliwosci jezyka sa
zaprogramowane w osobnych plikach, tzw. bibliotekach albo
modułach.
Moduły Pythona moga byc napisane w innym jezyku
programowania (zwykle C), skompilowane i dostepne w postaci
plików binarnych (typu .DLL w Windows lub .so w Linux).
Zwykły kod Pythona w pliku z rozszerzeniem .py równiez jest
modułem – łatwo jest wiec tworzyc własne (co jednak wymaga
min. umiejetnosci pisania funkcji).
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Wiekszosc funkcji dostepnych w jezyku Python nie jest
„wbudowana” w interpreter i wymaga załadowania przed uzyciem.
Funkcje i klasy rozszerzajace mozliwosci jezyka sa
zaprogramowane w osobnych plikach, tzw. bibliotekach albo
modułach.
Moduły Pythona moga byc napisane w innym jezyku
programowania (zwykle C), skompilowane i dostepne w postaci
plików binarnych (typu .DLL w Windows lub .so w Linux).
Zwykły kod Pythona w pliku z rozszerzeniem .py równiez jest
modułem – łatwo jest wiec tworzyc własne (co jednak wymaga
min. umiejetnosci pisania funkcji).
Gdzie Python szuka modułów:
1 W katalogu, gdzie uruchamiany jest program,
2 W katalogach instalacyjnych,
3 W katalogach podanych w zmiennej srodowiska $PYTHONPATH
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Do ładowania modułów słuzy instrukcja import, która ma kilka wersji:
Składnia import moduł
Opis Załaduj moduł jako jeden obiekt. Dostep do zawartosci
modułu mozliwy przez składnie atrybutów obiektu, np.:
moduł.funkcja
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Do ładowania modułów słuzy instrukcja import, która ma kilka wersji:
Składnia import moduł
Opis Załaduj moduł jako jeden obiekt. Dostep do zawartosci
modułu mozliwy przez składnie atrybutów obiektu, np.:
moduł.funkcja
Składnia import moduł as nazwa
Opis Załaduj moduł jak wyzej, ale pod inna nazwa: nazwa
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Do ładowania modułów słuzy instrukcja import, która ma kilka wersji:
Składnia import moduł
Opis Załaduj moduł jako jeden obiekt. Dostep do zawartosci
modułu mozliwy przez składnie atrybutów obiektu, np.:
moduł.funkcja
Składnia import moduł as nazwa
Opis Załaduj moduł jak wyzej, ale pod inna nazwa: nazwa
Składnia from moduł import funkcja1, funkcja2
from moduł import dana, funkcja3 as f
Opis Załaduj z modułu tylko wybrane elementy, opcjonalnie
pod zmienionymi nazwami. Nazw funkcja1,
funkcja2, dana oraz f bedzie mozna uzywac
bezposrednio. Nazwy moduł lub funkcja3 nie beda
dostepne.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów (bibliotek)
Najczesciej (nad)uzywana wersja instrukcji import:
Składnia from moduł import *
Opis Załaduj wszystkie nazwy z modułu do bezposredniego
dostepu
+ łatwe uzycie
− nazwa moduł nie jest dostepna
− mozemy nieswiadomie nadpisac własne zmienne,
albo nazwy z innych modułów!
>>> from math import *
>>> sin(pi/2)
1.0
>>> from cmath import *
>>> sin(pi/2)
(1+0j)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Korzystanie z modułów – przykłady
Gdy chcemy przeczytac opis modułu albo sprawdzic, czego
dostarcza:
>>> import math
>>> help(math)
>>> dir(math)
Ładowanie kilku modułów:
>>> import math, sys, os
Sprawdzenie, w jakich katalogach Python szuka modułów:
>>> print(sys.path)
Dodanie sciezki do własnych modułów:
>>> sys.path.insert(0,’/home/user/moje_moduly’)
Ładowanie tylko potrzebnych funkcji i stałych:
>>> from math import sin, pi
>>> from cmath import sin as complex_sin
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Przydatne moduły
math Funkcje i stałe matematyczne (trygonometria,
logarytmy)
cmath Jak math ale do obliczen na liczbach zespolonych
sys Informacje i ustawienia jezyka Python (argumenty linii
komend, strumienie wejscia i wyjscia, domyslnie
ładowane moduły, . . . )
os Interakcja z systemem operacyjnym (np. ustawienia
zmiennych srodowiska, operacje na sciezkach i
nazwach plików, . . . )
Do naszych zajec:
numpy do obliczen numerycznych (Numerical Python)
matplotlib do tworzenia wykresów
PIL tworzenie i obróbka grafiki (Python Image Library)
vtk zaawansowana wizualizacja danych (Visualization
Toolkit)
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Sortowanie wg klucza (np. alfabetyczne)
Napisy nie sa porównywane i sortowane alfabetycznie, tylko wg
numerów znaków w Unicode. Dlatego wielkie litery sa pierwsze:
>>> print(ord(’A’), ord(’Z’), ord(’a’))
65 90 97
>>> L = [’ala’, ’Ela’, ’ULA’]
>>> sorted(L)
/ [’Ela’, ’ULA’, ’ala’]
Metoda sort dla list i funkcja standardowa sorted maja parametr
key, za pomoca którego mozna problem rozwiazac.
Jako wartosc key podajemy nazwe funkcji lub metody, której wynik dla
sortowanych danych bedzie porównywany:
>>> sorted(L, key=str.lower)
, [’ala’, ’Ela’, ’ULA’]
Klucz jest uzyty tylko do porównan, napisy wynikowe nie sa zmieniane.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Sortowanie wg klucza (np. alfabetyczne)
Zamiana wielkosci znaków nadal nie rozwiazuje problemu sortowania
z uwzglednieniem znaków narodowych (Unicode collation):
>>> print(ord(’A’), ord(’A’), ord(’a’), ord(’a’))
65 260 97 261
>>> L.append(’cwok’)
>>> sorted(L, key=str.lower)
/ [’ala’, ’Ela’, ’ULA’, ’cwok’]
Do tego celu potrzebujemy wsparcia z modułu locale. Modułu tego
nie wystarczy załadowac, trzeba jeszcze zainicjalizowac ustawienia
lokalizacji:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, ’’)
>>> sorted(L, key=locale.strxfrm)
, [’ala’, ’cwok’, ’Ela’, ’ULA’]
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
’tekst%⟨flagi⟩⟨szer⟩⟨.⟩⟨prec⟩typtekst’ % dana
na przykład: ’%s’ % ’napis’
’x = %-10.3f’ % 1.5
Cel Formatowanie danych do zadanej postaci tekstowej.
Wynik działania jest napisem.
Składnia Od znaku % do litery oznaczajacej typ jest to pole
wstawiania, które operator % (za lewym napisem)
zastapi wartoscia po prawej.
Tekst nie bedacy czescia pola pozostanie niezmieniony.
Elementy podane w nawiasach katowych sa opcjonalne.
flagi kontroluja znak liczb, dosuniecie do lewej lub prawej itp.
szer wynikowa szerokosc pola
prec precyzja dla liczb lub długosc przycinania napisów
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
Typy pól wstawiania (konwersji):
s Pole napisowe. Nadaje sie do kazdego typu danych, które
beda przekształcone do formy napisowej za pomoca funk-
cji str(). Podanie precyzji n obcina napis do n pierwszych
znaków.
d lub i Liczba całkowita dziesietna. Mozna uzyc do wstawienia
liczby rzeczywistej, ale jej czesc ułamkowa bedzie obcieta
(nie zaokraglona). Precyzja uzupełnia zerami.
f Liczba rzeczywista zmiennoprzecinkowa (z kropka dzie-
sietna). Mozna wstawiac liczby całkowite. Wynik bedzie pra-
widłowo zaokraglony do zadanej precyzji, jak z uzyciem funk-
cji round(). Podanie precyzji 0 formatuje bez kropki dzie-
sietnej (i zaokragla do najblizszej liczby całkowitej).
% Pozwala na wstawienie znaku „%”.
Podano tylko wybrane typy pól. Pełna dokumentacja dostepna tutaj i
tutaj.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
Przykłady wyrazen:
’%s’ % ’ala’ → ’ala’
’"%s"’ % ’ala’ → ’"ala"’
’%5s’ % ’ala’ → ’ ala’
’%.2s’ % ’ala’ → ’al’
’%5.2s’ % ’ala’ → ’ al’
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
Przykłady wyrazen:
’%s’ % ’ala’ → ’ala’
’"%s"’ % ’ala’ → ’"ala"’
’%5s’ % ’ala’ → ’ ala’
’%.2s’ % ’ala’ → ’al’
’%5.2s’ % ’ala’ → ’ al’
’%d’ % 1 → ’1’
’%4d’ % 1 → ’ 1’
’%4.3d’ % 1 → ’ 001’
’%d’ % 1.9 → ’1’
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
Przykłady wyrazen:
’%s’ % ’ala’ → ’ala’
’"%s"’ % ’ala’ → ’"ala"’
’%5s’ % ’ala’ → ’ ala’
’%.2s’ % ’ala’ → ’al’
’%5.2s’ % ’ala’ → ’ al’
’%d’ % 1 → ’1’
’%4d’ % 1 → ’ 1’
’%4.3d’ % 1 → ’ 001’
’%d’ % 1.9 → ’1’
’%f’ % 1.9 → ’1.900000’
’%.3f’ % 1.9 → ’1.900’
’%7.3f’ % 1.9 → ’ 1.900’
’%.0f’ % 1.9 → ’2’
’Wynik: %.0f%%’ % 19.5 → ’Wynik: 20%’
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
Typy pól wstawiania (c.d.):
e Pole wykładnicze (notacja naukowa). Precyzja dotyczy cyfr po
kropce mantysy.
g Pole dla liczb rzeczywistych. Wstawia forme wykładnicza (jak e,
jesli wykładnik jest mniejszy niz -4 lub nie wiekszy od podanej
precyzji. W przeciwnym razie działa jak pole typu f.
Wstawianie kilku danych w napis formatujacy wymaga tupli.
pierwszy element tupli po prawej bedzie wstawiony w pierwsze
pole w napisie po lewej, drugi w drugie, etc.
liczba pól i liczba elementów w tupli musi sie zgadzac.
’%s ma %d lat’ % (imie, wiek) → ’Ula ma 9 lat’
’%d to %.0f%% z %d’ % (x,100.0*x/y,y) → ’2 to 50% z 4’
B ’%s’ % (1,2,3) → TypeError
’%s’ % ((1,2,3),) → ’(1,2,3)’ ,
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Formatowanie wyników: operator %
’tekst%⟨flagi⟩⟨szer⟩⟨.⟩⟨prec⟩typtekst’ % dana
Flagi (wybrane):
- Dosuniecie do lewej strony pola o zadanej szerokosci
+ Dla liczb: wynik zawsze ze znakiem
spacja Odstep zamiast + dla liczb dodatnich
0 Dla liczb: wypełnij pole zerami do podanej szerokosci
(nie spacjami)
Przykłady: ’%-5s’ % ’ala’ → ’ala ’
’%3d’ % 1 → ’ 1’
’%-3d’ % 1 → ’1 ’
’%+d’ % 1 → ’+1’
’%-+3d’ % 1 → ’+1 ’
’%- 3d’ % 1 → ’ 1 ’
’%03d’ % 1 → ’001’
’%+03d’ % 1 → ’+01’
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Zródła danych, wejscie i wyjscie
Strumienie wejscia-wyjscia (IO):
kazdy program ma podłaczone 3 strumienie danych:
standardowe „wejscie” (stdin), standardowe „wyjscie” (stdout)
oraz wyjscie błedów (stderr).
przy pracy w terminalu, stdin jest podłaczone do klawiatury, a
stdout i stderr wypisuja tekst na terminalu.
funkcja input() czyta dane ze stdin.
stdout jest uzywany przez funkcje print().
Komunikaty błedów Pythona trafiaja do stderr.
Wszystkie trzy strumienie mozna przekierowac do/z plików albo
do/z inych programów.
Zródłem danych moze byc równiez linia komend. Dostep do strumieni
IO oraz do linii komend zapewnia moduł sys (atrybuty stdin, stderr,
stdout i argv).
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Zródła danych, wejscie i wyjscie
Przykład: test.py
#!/usr/bin/env python3
for i in range(5):
x = float(input())
print(’x=%.1f, x*x=%.1f’ % (x, x**2))
Zamiast z klawiatury, mozemy skierowac do standardowego wejscia
programu dane z pliku:
user@computer:~$ ./test.py < dane
x=1.0, x*x=1.0
x=2.0, x*x=4.0
x=2.5, x*x=6.2
x=3.0, x*x=9.0
x=-4.0, x*x=16.0
←
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Format CSV (comma separated values)
Zwykły plik tekstowy z rozszerzeniem .csv jest rozpoznawany i
importowany jako arkusz przez MS Excel, OpenOffice lub LibreOffice
Calc itp. Wystarczy, ze:
Separatorem kolumn jest przecinek, srednik lub tabulacja;
Dane tekstowe sa w cudzysłowach lub apostrofach (koniecznie,
jesli zawieraja znaki separatora).
Podczas importu mozna wybrac separator kolumn oraz jezyk. Jezyk
importu „English (USA)” prawidłowo rozpoznaje liczby podane z
kropka dziesietna.
from math import sin
print(’"x";"sin(x)"’)
for i in range(-10,11):
x = i * 0.1
print(’%.1f;%f’ % (x,sin(x)))
→
"x";"sin(x)"
-1.0;-0.841471
-0.9;-0.783327
-0.8;-0.717356
-0.7;-0.644218
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Format CSV (comma separated values)
Strumien wyjscia z programu (stdout) mozna skierowac do pliku:
user@computer:~$ ./sinus.py > wyniki.csv
→
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach
Plikiem nazywamy zbiór danych zapisanych pod pewna nazwa
na trwałym nosniku, takim jak dysk twardy (HDD lub SDD),
pendrive, płyta DVD itp.
Korzystanie z plików jest mozliwe tylko za posrednictwem
systemu operacyjnego (OS), który zapewnia efektywny i
bezpieczny dostep do danych.
Dostep do plików jest buforowany w pamieci operacyjnej. W
szczególnosci gdy piszemy do pliku, dane nie trafiaja od razu na
nosnik.
Operacje na plikach sa kosztowne i OS nie pozwala programom
korzystac na raz ze zbyt wielu plików.
Python unifikuje dostep do danych z zewnatrz tak, ze prawie
kazde zródło danych mozna obsługiwac tak, jakby było plikiem.
Strumienie sys.stdin, sys.stdout i sys.stderr sa z punkty
widzenia Pythona plikami.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach
Niezaleznie od jezyka programowania i OS, dostep do plików wymaga
podobnych operacji:
1 Najpierw trzeba poprosic OS o dostep do pliku o okreslonej
nazwie i połozeniu, podajac jednoczesnie czy chcemy tylko
czytac dane, tylko zapisywac, czy jedno i drugie (tryb dostepu).
Ta operacja nazywa sie otwarciem pliku.
2 Obiekt, za posrednictwem którego wykonujemy operacje na
danych w plikach, musimy zapamietac w zmiennej. Mozemy ja
nazywac zmienna plikowa.
3 Potem mozemy z pliku czytac lub do niego pisac, zaleznie od
uzyskanego trybu dostepu, wykonujac odpowiednie operacje na
zmiennej plikowej.
4 Gdy konczymy korzystac z pliku, nalezy go zamknac. Wtedy
system zapisuje na nosnik to, co trzymał w pamieci, i zwalnia
pamiec uzywana do buforowania.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach
Otwieranie plików
inp = open(’dane.txt’, ’r’)
Napis ’dane.txt’ to nazwa pliku. Musi byc podana z
rozszerzeniem. Jezeli pliku nie ma w tym folderze, gdzie działa
program, trzeba podac połozenie (np. ’Desktop/dane.txt’).
’r’ to tryb dostepu (mozna podac jako mode=’r’). Tryb ’r’ jest
domyslny i oznacza dostep tylko do odczytu (od read).
out = open(’wyniki.txt’, ’w’)
Otwarcie pliku o nazwie ’wyniki.txt’ do zapisu (tryb ’w’ od
write).
Uwaga: ten tryb otwarcia kasuje wszystko, co było w pliku!
inp oraz out to nazwy zmiennych, przez które bedziemy mieli dostep
do zawartosci otwartych plików.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach
Tryby dostepu do plików
’r’ tylko do odczytu (read-only). Plik musi istniec.
’w’ tylko do zapisu (write-only). Jesli plik istnieje, zostaje nadpisany.
Jesli nie istniał, powstaje (pusty) w momencie otwarcia.
’x’ tylko do zapisu, na wyłacznosc (exclusive). Zabezpiecza przed
skasowaniem istniejacego pliku (bład przy próbie otwarcia).
’a’ do dopisywania (append). Jesli plik istnieje, zostanie przewiniety
na koniec. Jesli nie istniał, zostanie utworzony.
Modyfikatory trybu dostepu
Te litery mozemy dodac do podstawowego trybu, w razie potrzeby (np.
’rb’ albo ’r+’:
’+’ Pozwala na odczyt (’w+’ lub ’a+’) i zapis (’r+’)
’b’ Tryb binarny - dla danych, które nie sa tekstem ASCII ani Uni-
code. Odczyt z tak otwartego pliku daje wartosci typu bytes, nie
str.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: otwieranie
Kiedy jakiego trybu uzyc do otwarcia pliku?
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
out = open(’wyniki.txt’, ’w’)
1 Mozemy zdac sie na funkcje print():
print(x, log(x), file=out)
2 Albo, uzyc metod zmiennej plikowej.
W tym przypadku, dane do wypisania musimy sami przekształcic
na napis, zadbac o odstepy, konce linii itp.
out.write(’%8.3f %8.3f\n’ % (x, log(x)))
Metoda write obiektów plikowych przyjmuje tylko jeden
parametr (inaczej niz print), i musi on byc typu str (lub bytes
w trybie zapisu binarnego, ’wb’).
Sposób pierwszy jest wygodniejszy, ale dostepny tylko w Pythonie 3.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
Na kolejnych slajdach ilustruje, co sie dzieje z zawartoscia
zapisywanego zbioru danych (na twardym dysku lub innym
nosniku), oraz jak zmienia sie aktualna pozycja w pliku (tylko w
pamieci, pokazana jako czerwony kursor), podczas wykonywania
przykładowych operacji.
Zrozumienie działania operacji na plikach znacznie ułatwia
uruchamianie i poprawianie własnych programów.
Jezeli wykonujemy program interakcyjnie krok po kroku (np.
testujac), zeby zobaczyc efekt zapisu w pliku na dysku musimy
albo plik zamknac, albo uzyc metody flush. Do sprawdzenia
zawartosci pliku w Linuksie mozna uzyc komendy cat plik
w terminalu.
Po zamknieciu pliku, nie da sie juz czytac ani pisac.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’) wyniki.txt
0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)wyniki.txt
10
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
wyniki.txt
[] 12 ala
10
Nie nalezy (nad)uzywac flush – to bardzo zwalnia program
i nadmiernie obciaza dysk. Przydaje sie jednak do testów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
wyniki.txt
[] 12 ala
XX
13
Nie nalezy (nad)uzywac flush – to bardzo zwalnia program
i nadmiernie obciaza dysk. Przydaje sie jednak do testów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
>>> out.write(’a’)
1
wyniki.txt
[] 12 ala
XX
14
Nie nalezy (nad)uzywac flush – to bardzo zwalnia program
i nadmiernie obciaza dysk. Przydaje sie jednak do testów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
>>> out.write(’a’)
1
>>> out.write(’bc’)
2
wyniki.txt
[] 12 ala
XX
16
Nie nalezy (nad)uzywac flush – to bardzo zwalnia program
i nadmiernie obciaza dysk. Przydaje sie jednak do testów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
>>> out.write(’a’)
1
>>> out.write(’bc’)
2
>>> out.flush()
wyniki.txt
[] 12 ala
XX
abc16
Nie nalezy (nad)uzywac flush – to bardzo zwalnia program
i nadmiernie obciaza dysk. Przydaje sie jednak do testów.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
>>> out.write(’a’)
1
>>> out.write(’bc’)
2
>>> out.flush()
B >>> out.write([], 12, ’ala’)
TypeError: write() takes exactly one argument (3 given)
wyniki.txt
[] 12 ala
XX
abc16
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out = open(’wyniki.txt’, ’w’)
>>> print([], 12, ’ala’, file=out)
>>> out.flush()
>>> print(’XX’, file=out, flush=1)
>>> out.write(’a’)
1
>>> out.write(’bc’)
2
>>> out.flush()
B >>> out.write([], 12, ’ala’)
TypeError: write() takes exactly one argument (3 given)
B >>> out.write(11)
TypeError: write() argument must be str, not int
wyniki.txt
[] 12 ala
XX
abc16
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16wyniki.txt
[] 12 ala
XX
abc16
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
wyniki.txt
[] 12 ala
XX
13abc
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
wyniki.txt
[] 12 ala
XX
abc16
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
wyniki.txt
[] 12 ala
XX
---16
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
wyniki.txt
[]212 ala
XX
---
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
>>> out.write(’NOWE\n’)
5
wyniki.txt
[] 12 ala
7XX
---
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
>>> out.write(’NOWE\n’)
5
>>> out.truncate()
7
wyniki.txt
[]NOWE
7
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
>>> out.write(’NOWE\n’)
5
>>> out.truncate()
7
>>> out.write(’%s %d\n’ % ([],12))
6
wyniki.txt
[]NOWE
13
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
>>> out.write(’NOWE\n’)
5
>>> out.truncate()
7
>>> out.write(’%s %d\n’ % ([],12))
6
wyniki.txt
[]NOWE
[] 12
>>> out.close()
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: zapis
>>> out.tell()
16
>>> out.seek(13)
13
>>> out.write(’---’)
3
>>> out.flush()
>>> out.seek(2)
2
>>> out.write(’NOWE\n’)
5
>>> out.truncate()
7
>>> out.write(’%s %d\n’ % ([],12))
6
wyniki.txt
[]NOWE
[] 12
>>> out.close()
B >>> out.write(’\n’)
ValueError:
I/O operation on closed
file.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
Zmienna plikowa udostepnia kilka metod do odczytu z pliku:
read wczytuje wszystko (lub podana liczbe
znaków/bajtów), najbardziej przydatna dla danych
binarnych;
readline wczytuje na raz jedna linie (razem z koncem),
najbardziej przydatna dla tekstu;
readlines wczytuje cały plik, zwraca liste linii. Przydatna tylko
dla wzglednie małych plików.
Wczytane dane sa wynikiem funkcji (trzeba zapamietac je w
zmiennej) typu str (read, readline), bytes (w trybie binarnym
’rb’) lub lista napisów (readlines).
Kazdy odczyt przesuwa aktualna pozycje w pliku.
Próba odczytu na koncu pliku daje pusty wynik (pusty napis lub
pusta liste).
Zmienna plikowa jest równiez iteratorem, zwracajacym kolejne
linie w petli for.
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
woda.xyz
03
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
52
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’ woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
52
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
woda.xyz
03
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
woda.xyz
3
3H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
ile: 3
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
woda.xyz
3
H2O
7O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
ile: 3
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
7O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
ile: 3
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
22H 0.8 0.6 0.0
H -0.8 0.6 0.0
wyr: [’O’,’0.0’,’0.0’,’0.0’]
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
22H 0.8 0.6 0.0
H -0.8 0.6 0.0
wyr: [’O’,’0.0’,’0.0’,’0.0’] symbol: ’O’
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
22H 0.8 0.6 0.0
H -0.8 0.6 0.0
wyr: [’O’,’0.0’,’0.0’,’0.0’] symbol: ’O’ x,y,z: 0.0,0.0,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
22H 0.8 0.6 0.0
H -0.8 0.6 0.0
wyr: [’O’,’0.0’,’0.0’,’0.0’] symbol: ’O’ x,y,z: 0.0,0.0,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
37H -0.8 0.6 0.0
wyr: [’H’,’0.8’,’0.6’,’0.0’] symbol: ’O’ x,y,z: 0.0,0.0,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
37H -0.8 0.6 0.0
wyr: [’H’,’0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: 0.0,0.0,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
37H -0.8 0.6 0.0
wyr: [’H’,’0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: 0.8,0.6,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
37H -0.8 0.6 0.0
wyr: [’H’,’0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: 0.8,0.6,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
52
wyr: [’H’,’-0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: 0.8,0.6,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
52
wyr: [’H’,’-0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: 0.8,0.6,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
>>> inp = open(’woda.xyz’)
>>> inp.read()
’ 3\nH2O\nO 0.0 0.0 0.0\nH 0.8 0.6 0.0\nH -0.8 0.6 0.0\n’
>>> inp.read()
’’
>>> inp.seek(0)
0
>>> ile = int(inp.readline())
>>> inp.readline()
’H2O\n’
>>> for i in range(ile):
... wyr = inp.readline().split()
... symbol = wyr[0]
... x,y,z = float(wyr[1]), float(wyr[2]), float(wyr[3])
woda.xyz
3
H2O
O 0.0 0.0 0.0
H 0.8 0.6 0.0
H -0.8 0.6 0.0
52
wyr: [’H’,’-0.8’,’0.6’,’0.0’] symbol: ’H’ x,y,z: -0.8,0.6,0.0
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Operacje na plikach: odczyt
Taka petle jak na poprzednim slajdzie mozemy uzyc gdy z góry
wiadomo, ile linii z pliku trzeba wczytac. Najczesciej jednak
potrzebujemy petli po wszystkich liniach w pliku.
Czesto uzywany idiom to:
>>> while True:
... linia = inp.readline()
... if not linia: break # koniec pliku
... # przetwarzanie danych z biezacej linii
Najbardziej zwiezłym i efektywnym sposobem jest jednak skorzystanie
z tego, ze zmienna plikowa jest iteratorem:
>>> for linia in inp:
... # przetwarzanie danych z biezacej linii
Paweł Kedzierski Przetwarzanie i wizualizacja danych
Przetwarzanie i wizualizacja danych - lab Wybrane tematy z podstaw Pythona
Parsowanie plików tekstowych
Wczytywanie danych z plików tekstowych wymaga znajomosci formatu
pliku. Trzeba znalezc i wybrac dane potrzebne programowi i zamienic
ich forme tekstowa odpowiedni typ (np. na liczby do obliczen).
Np. w formacie PDB, współrzedne atomów podane sa w liniach
zaczynajacych sie od znaków ATOM lub HETATM, w kolumnach 31-38
(x), 39-46 (y) i 47-54 (z), a nazwa atomu w kolumnach 13-16:
ATOM 1 N LYS A 1 16.979 26.750 -1.970
>>> for linia in open(’1rbx.pdb’):
... if linia[:4] == ’ATOM’:
... x = float(linia[30:38])
... y = float(linia[38:46])
... z = float(linia[46:54])
... atom = linia[12:16].strip()
... print(’%s %.2f %.2f %.2f’ % (atom,x,y,z))
N 16.98 26.75 -1.97
Paweł Kedzierski Przetwarzanie i wizualizacja danych