Zaawansowany kurs języka Python



Podobne dokumenty
Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Kurs rozszerzony języka Python

Podstawy programowania w Pythonie

Programowanie obiektowe

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Kurs języka Python. Lista 1.

Python. Wprowadzenie. Jolanta Bachan

Zaawansowany kurs języka Python

Informatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)

Wstęp do programowania

Zaawansowany kurs języka Python

Język Python (2) Język Python (2) 1/36

Python i programowanie funkcyjne. Python i programowanie funkcyjne czyli nie tylko obiektowość rządzi. OSEC Funkcyjnie w języku Python 1 z 40

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Język Python. Język Python 1/35

Biblioteka standardowa - operacje wejścia/wyjścia

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie obiektowe

Zaawansowany kurs języka Python

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

Środowisko programisty

Programowanie w Ruby

Podstawy programowania w Pythonie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Kurs rozszerzony języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]


Zaawansowany kurs języka Python

Wstęp do programowania

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

System operacyjny Linux

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Kurs rozszerzony języka Python

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Wykład 6 Dziedziczenie cd., pliki

Kurs rozszerzony języka Python

Metody numeryczne Laboratorium 2

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Pliki. Informacje ogólne. Obsługa plików w języku C

Język Python (3) Język Python (3) 1/35

Programowanie funkcyjne w Pythonie

Funkcje zawarte w bibliotece < io.h >

Języki i metody programowania

Podstawy programowania skrót z wykładów:

Funkcje zawarte w bibliotece < io.h >

Kurs rozszerzony języka Python

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Wykresy i interfejsy użytkownika

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Podstawy i języki programowania

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Pliki. Informacje ogólne. Obsługa plików w języku C

Operacje wejścia/wyjścia (odsłona druga) - pliki

Podstawowe I/O Liczby

SZKOLENIE WPROWADZENIE DO R UNIWERSYTET SZCZECIŃSKI al. Papieża Jana Pawła II nr 22a Szczecin

Języki skryptowe w programie Plans

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Kurs rozszerzony języka Python

Wstęp do Pythona. Janusz Szwabiński. Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Ćwiczenie 1. Wprowadzenie do programu Octave

Języki programowania imperatywnego

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Technologie informacyjne: Excel i Python

Zaawansowane aplikacje WWW - laboratorium

Podstawy programowania w języku C++

Programowanie obiektowe

Część 4 życie programu

Sphinx - system dokumentacji dla Pythona

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

1. CZYM JEST SERIALIZACJA

Wstęp do programowania

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie obiektowe

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

I - Microsoft Visual Studio C++

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Przegląd języka Python. Łukasz Anwajler

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Programowanie strukturalne

Programowanie obiektowe

Kurs języka Python. Wątki

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Programowanie i projektowanie obiektowe

Wykład 03 JavaScript. Michał Drabik

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Obsługa blędów i zewnętrznych plików

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Język C++ wykład VIII

Bezpieczne uruchamianie apletów wg

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wstęp do ruby dla programistów javy

rozdział 4: ZMIENNE I INSTRUKCJE

Metody dostępu do danych

Transkrypt:

Wykład 4. 23 października 2015

Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie

Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie

Protokół iteracyjny Producent Umiem dostarczać kolejne elementy kolekcji po jednym elemencie, a jak już wszystkie dostarczę to poinformuję o tym. Konsument Daj kolejny element.

Konsumenci instrukcja for in operator in

Naiwna wersja implementacji protokołu Metody kolekcji iter: zainicjuj przeglądanie; next: zwróć element i przesuń wskaźnik; jeśli koniec zwróć None.

Przykładowa implementacja class Kolekcja: def init (self): self.data = [ jeden, dwa, trzy ] def iter(self): self.pointer = 0 def next(self): if self.pointer < len(self.data): self.pointer += 1 return self.data[self.pointer - 1] else : return None

Wady rozwiązania suma = 0 for x in wek 1: for y in wek 2: suma += x*y

Wady rozwiązania wek 1 = wek 2 = Kolekcja() suma = 0 for x in wek 1: for y in wek 2: suma += x*y

Postulat Fajnie byłoby, żeby jedną kolekcję dało się przeglądać jednocześnie w kilku miejscach

Postulat Fajnie byłoby, żeby jedną kolekcję dało się przeglądać jednocześnie w kilku miejscach Diagnoza problemu Kłopot jest dlatego, że jest tylko jeden wskaźnik do przeglądania.

Postulat Fajnie byłoby, żeby jedną kolekcję dało się przeglądać jednocześnie w kilku miejscach Diagnoza problemu Kłopot jest dlatego, że jest tylko jeden wskaźnik do przeglądania. Rozwiązanie problemu Każdy konsument (pętla, wątek etc.) otrzymuje własny wskaźnik przeglądania.

Implementacja przeglądania kolekcji Protokół (Python 3.*) Na początku wywoływana jest metoda iter ;

Implementacja przeglądania kolekcji Protokół (Python 3.*) Na początku wywoływana jest metoda iter ; zwróconą wartością powinien być obiekt (enumerator) implementujący metodę next () która za każdym wywołaniem zwraca kolejny element kolekcji

Implementacja przeglądania kolekcji Protokół (Python 3.*) Na początku wywoływana jest metoda iter ; zwróconą wartością powinien być obiekt (enumerator) implementujący metodę next () która za każdym wywołaniem zwraca kolejny element kolekcji Metoda next () jest wywoływana tak długo, póki nie zostanie zgłoszony wyjątek StopIteration

Implementacja przeglądania kolekcji Protokół (Python 3.*) Na początku wywoływana jest metoda iter ; zwróconą wartością powinien być obiekt (enumerator) implementujący metodę next () która za każdym wywołaniem zwraca kolejny element kolekcji Metoda next () jest wywoływana tak długo, póki nie zostanie zgłoszony wyjątek StopIteration Python 2.* Zamiast next jest next.

Przykład Zadanie Implementacja kolekcji zwracającej kolejne liczby od 1 do 10

Przykład Zadanie Implementacja kolekcji zwracającej kolejne liczby od 1 do 10 Implementacja class ListaLiczb: def iter (self): self.licznik = 0 return self def next (self): if self.licznik >= 10: raise StopIteration self.licznik += 1 return self.licznik

Nieskończona lista liczb naturalnych Iterator class IntIterator(object): def init (self): self.licznik = 0 def next (self): wynik = self.licznik self.licznik += 1 return wynik Implementacja kolekcji class IntCollection(object): def iter (self): return IntIterator()

Zastosowanie Obliczyć max(σ i=0 i) takie że Σ i=0 i < 100

Zastosowanie Obliczyć max(σ i=0 i) takie że Σ i=0 i < 100 Rozwiązanie suma = 0 for i in IntCollection(): if suma + i >= 100: break suma += i

Jawne użycie iteratorów >>> l = [1,2,3] >>> it = iter(l) >>> it. next () 1 >>> next(it) 2 >>> next(it) 3 >>> next(it) Traceback (most recent call last): File <stdin>, line 1, in <module> StopIteration

Uwagi Pytanie Czy zawsze pożądane jest posiadanie więcej niż jednego iteratora?

Uwagi Pytanie Czy zawsze pożądane jest posiadanie więcej niż jednego iteratora? Kontrprzykład Przetwarzanie plików.

Ważne filter map reduce

Ważne filter map reduce Python 2.* Funkcje zwracają listę Python 3.* Funkcje zwracają iterator

Progamowanie funkcjonalne Operatory (moduł operator) operator.add(x,y) operator.mul(x,y) operator.pow(x,y)...

Progamowanie funkcjonalne Operatory (moduł operator) operator.add(x,y) operator.mul(x,y) operator.pow(x,y)... Iloczyn skalarny sum(map(operator.mul, vector1, vector2))

Iterator a lista Python 3.* list(filter(lambda x : x > 2, [1,2,3,4]))

Biblioteka itertools Mnóstwo funkcji produkujących generatory

Biblioteka itertools Mnóstwo funkcji produkujących generatory Kolejne potęgi 2 it = map(lambda x : 2**x, itertools.count()) next(it) next(it) next(it)...

Definicje Generator Generator to funkcja, która zwraca iterator.

Definicje Generator Generator to funkcja, która zwraca iterator. Wyrażenie generatorowe Wyrażenie generatorowe to wyrażenie, która zwraca iterator.

Jak implementować funkcje generatorowe yield

Wykorzystanie yield Implementacja nieskończonej listy potęg 2 def power2(): power = 1 while True: yield power power = power * 2 it = power2() for x in range(4): print next(it)

Wykorzystanie yield Implementacja nieskończonej listy potęg 2 def power2(): power = 1 while True: yield power power = power * 2 it = power2() for x in range(4): print next(it) Nieskończona pętla for i in power2(): print i

Wyrażenia generatorowe Instrukcja wyr generatorowe = (i** 2 for i in range(5)) jest równoważna def wyr generatorowe(): for i in range(5): yield i**2

Zastosowanie String szesnastkowo :.join( :02x.format(ord(c)) for c in s)

Plan wykładu Pliki tekstowe Trwałość obiektów CSV Strumienie 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie

Operacje na plikach Pliki tekstowe Trwałość obiektów CSV Strumienie Otwarcie i zamknięcie pliku fh = open( plik, r )... fh.close() Atrybuty otwarcia r odczyt w zapis a dopisanie r+ odczyt i zapis rb, wb, ab odczyt i zapis binarny (tylko Windows i Macintosh)

Metody czytania pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Odczyt całego pliku fh.read() Odczyt tylko size znaków fh.read(size) Odczyt wiersza, wraz ze znakiem \n fh.readline() Zwraca listę odczytanych wierszy fh.readlines()

Odczyt pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Przykład fh = open( test.py, r ) while True: wiersz = fh.readline() if len(wiersz) == 0: break print wiersz, fh.close()

Odczyt pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Przykład fh = open( test.py, r ) while True: wiersz = fh.readline() if len(wiersz) == 0: break print wiersz, fh.close() Inny przykład fh = open( test.py, r ) for wiersz in fh: print wiersz,

Zapis do pliku Pliki tekstowe Trwałość obiektów CSV Strumienie fh.write( dane zapisywane do pliku\n ) fh.writelines([ to\n, są\n, kolejne\n, wiersze\n ])

Zamykanie pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Uwaga Zawsze należy zamykać pliki. Przykład try: fh = open( nieistniejacy, r ) data = fh.read() finally: fh.close()

Zamykanie pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Uwaga Zawsze należy zamykać pliki. Przykład try: fh = open( nieistniejacy, r ) data = fh.read() finally: fh.close() Alternatywne zamykanie pliku del fh

Zamykanie pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Porada with open( nieistniejacy, r ) as fh: data = fh.read()

Zamykanie pliku Pliki tekstowe Trwałość obiektów CSV Strumienie Porada with open( nieistniejacy, r ) as fh: data = fh.read() Uwaga Dopiero od 2.5, przy włączonej opcji with statement. Dostępne na stałe od 2.6.

Formaty danych Pliki tekstowe Trwałość obiektów CSV Strumienie Pliki tekstowe Pliki z rekordami Pliki CSV Pliki *.ini XML...

Pliki tekstowe Trwałość obiektów CSV Strumienie Przechowywanie obiektów w pliku: pakiet pickle Zapis obiektu import pickle obj = Obj() fh = open( plik.obj, w ) pickle.dump(obj, fh) fh.close() Odczyt obiektu fh = open( plik.obj, r ) obj = pickle.load(fh) fh.close()

Comma Separated Values CSV Pliki tekstowe Trwałość obiektów CSV Strumienie Dane osobowe imie1, nazwisko1, 2001-01-01, 3 imie2, nazwisko3, 2009-11-23, 2 Dane giełdowe 04PRO,2009-11-10 13:17:33.0,C/P/M,2.97,2.97,3.0,2.92,2.93 05VICT,2009-11-10 13:18:01.0,C/P/S,0.84,0.84,0.86,0.84,0.85 06MAGNA,2009-11-10 13:18:43.0,C/P/S,1.15,1.15,1.17,1.14,1.14

Parametry formatu Pliki tekstowe Trwałość obiektów CSV Strumienie delimiter separator, np., ; : lineterminator koniec wiersza quotechar znak cudzysłowu quoting kiedy ujmować pola w cudzysłów; QUOTE ALL, QUOTE NONNUMERIC, QUOTE NONE

CSV - dialekty Pliki tekstowe Trwałość obiektów CSV Strumienie Dialekt: domyślne parametry, np. dialekt excel Możliwość dodania własnego dialektu

Odczyt CSV Pliki tekstowe Trwałość obiektów CSV Strumienie Przykład import csv reader = csv.reader( open( /etc/passwd, r ), delimiter= :, quoting=csv.quote NONE) for row in reader: print row

Zapis w formacie CSV Pliki tekstowe Trwałość obiektów CSV Strumienie Przykład import csv data = [ [1, Kubus ], [2, Puchatek ] ] writer = csv.writer( open( out, w ), dialect=csv.excel) writer.writerows(data)

CSV słowniki Pliki tekstowe Trwałość obiektów CSV Strumienie Data;FS;FO;FOE;FSW;FZ;FPA;FRP;FANE; 2009-05-05;1416.17;183.01;101.80;123.63; 2009-05-04;1416.03;183.11;101.95;123.48; 2009-05-02;1415.79;183.06;101.93;123.43;

Przetwarzanie słowników Pliki tekstowe Trwałość obiektów CSV Strumienie fh = open( notowania.csv, r ) reader = csv.dictreader(fh, delimiter= ; ) for row in reader: for k in row.keys(): print k, row[k]

CSV, słowniki cd. Pliki tekstowe Trwałość obiektów CSV Strumienie Własne nazwy kolumn fh = open( notowania.csv, r ) klucze = [ lp, name ] reader = csv.dictreader(fh, fieldnames= klucze) for row in reader: print row[ lp ], row[ name ]

Strumienie; motywacje Pliki tekstowe Trwałość obiektów CSV Strumienie def przegladaj notowania(zrodlo): reader = csv.dictreader(zrodlo, delimiter= ; ) for row in reader: for k in row.keys(): print k, row[k] Wywołanie funkcji przegladaj notowania( dane.csv ) url = http://www.notowania.pl/dane.csv przegladaj notowania(url)

Rodzaje strumieni danych Pliki tekstowe Trwałość obiektów CSV Strumienie Plik dyskowy Sieć komputerowa (url) String...

Własności strumieni Pliki tekstowe Trwałość obiektów CSV Strumienie implementacja kolekcji.read().read(size).write(buf).close()...

Implementacja funkcji Pliki tekstowe Trwałość obiektów CSV Strumienie def przegladaj notowania(zrodlo): reader = csv.dictreader(zrodlo, delimiter= ; ) for row in reader: for k in row.keys(): print k, row[k]

Pliki tekstowe Trwałość obiektów CSV Strumienie Plik dyskowy in stream = open( dane.csv, r ) przegladaj notowania(in stream) in stream.close() Internet import urllib url = http://www.notowania.pl/dane.csv in stream = urllib.urlopen(url) przegladaj notowania(in stream) in stream.close()

String jako strumień Pliki tekstowe Trwałość obiektów CSV Strumienie String jako strumień str = 2006-11-13;12.45;45.78 import StringIO in stream = StringIO.StringIO(str) przegladaj notowania(in stream) in stream.close()