Kurs rozszerzony języka Python

Podobne dokumenty
Zaawansowany kurs języka Python

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

XML w.net. Dominik Baś nr alb Wrocław, 29 maja 2007

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Zaawansowany kurs języka Python

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

DOM (Document Object Model)

XML i nowoczesne technologie zarządzania treścią

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

Zaawansowane aplikacje WWW - laboratorium

Dokumentacja Użytkownika Systemu

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

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Zaawansowany kurs języka Python

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

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

XML extensible Markup Language. Paweł Chodkiewicz

Kurs rozszerzony języka Python

Zaawansowany kurs języka Python

29. Poprawność składniowa i strukturalna dokumentu XML

XML Path Language (XPath)

UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

XML extensible Markup Language. część 5

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Facelets ViewHandler

XML i nowoczesne technologie zarządzania treścią 2007/08

Wyrażenia regularne. Wyrażenia regularne 1/41

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

Model semistrukturalny

I. Formatowanie tekstu i wygląd strony

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python

Złożone komponenty JSF wg

Podstawy języka XML. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Zaawansowany kurs języka Python

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

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Podstawy (X)HTML i CSS

Przed zaimportowaniem danych należy odpowiednio skonfigurować sposób interpretacji danych z zakładki [Ustawienie pliku importu]

Podstawy XML-a. Zaawansowane techniki programowania

Złożone komponenty JSF wg

HTML (HyperText Markup Language) hipertekstowy język znaczników

Zasady programowania Dokumentacja

Zaawansowany kurs języka Python

Dokumenty SEDU składają się z dwóch części: Opisu sprawy Formularza elektronicznego

Aplikacje WWW - laboratorium

Rys.2.1. Drzewo modelu DOM [1]

Kurs języka Python. Wykład 5. Marcin Młotkowski. 9 listopada Rodzaje parametrów funkcji. 2 Biblioteka Tk. 3 Układanie kontrolek w oknie

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

XQuery. sobota, 17 grudnia 11

REACT NATIVE. Anna Maziejuk Kamil Jankowski

METODY REPREZENTACJI INFORMACJI

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

Definicja. Not Only SQL

JavaScript funkcyjność

Programowanie w Ruby

Prezentacja i transformacja

HTML DOM, XHTML cel, charakterystyka

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

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

Wstęp do programowania

Spis treści Informacje podstawowe Predykaty Przykłady Źródła RDF. Marek Prząda. PWSZ w Tarnowie. Tarnów, 6 lutego 2009

Katalog książek cz. 2

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

Steganografia w HTML. Łukasz Polak

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

media Blitz wydajne sytemy szablonów

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Metody dostępu do danych

Programowanie obiektowe

Rola języka XML narzędziem

Podstawy programowania w Pythonie

OSIOŁKOWI W ŻŁOBY DANO...

Wyrażenia regularne. Regular expressions. aka. Regexp

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Wprowadzenie do języka HTML

Zaawansowany kurs języka Python

Sphinx - system dokumentacji dla Pythona

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

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

JAVA I XML ZAGADNIENIA: DOM, SAX, JAXB, XMLDecoder i XMLEncoder, ANT.

Zaawansowany kurs języka Python

Programowanie i projektowanie obiektowe

Programowanie obiektowe

XML extensible Markup Language. część 5

Specyfikacja API bramki SMS/MMS/TTS

Programowanie w Ruby

Drzewa DOM. Maciej Zakrzewicz.

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

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

PROGRAMOWANIE. WNPiD UAM, Programowanie, inż. Piotr Jabłoński

Transkrypt:

Wykład 5. 3 listopada 2017

Plan wykładu 1 2 3

Plan wykładu 1 2 3

Przykłady wyrażeń regularnych W systemie windows c:\windows\system32> dir *.exe Wynik accwiz.exe actmovie.exe ahui.exe alg.exe append.exe arp.exe asr fmt.exe, asr ldm.exe...

Przykłady, cd?n*x, *BSD $ rm *.tmp Przykłady wyrażeń regularnych wyr. reg. zbiór słów alamakota { alamakota } (hop!)* {, hop!, hop!hop!, hop!hop!hop!,...} br+um { brum, brrum, brrrum,... }

Wyszukwanie a dopasowywanie biblioteka re import re dopasowanie od początku tekstu if re.match( brr+um, brrrrum!!! ): print( pasuje ) Niepasujący suffiks może być zignorowany. wyszukiwanie if re.search( brr+um, Autko robi brrrrum!!! ): print( jest )

Kompilowanie wyrażeń regularnych import re automat = re.compile( brr+um ) automat.search( brrrrum ) automat.match( brrrrum )

Interpretacja wyniku >>> re.search( brr+um, brrrum!!! ) MatchObject.group(): dopasowany tekst.start(): początek dopasowanego tekstu.end(): koniec dopasowanego tekstu

Większy przykład Zadanie Znaleźć na stronie html owej wszystkie odwołania do innych stron przykłady www.ii.uni.wroc.pl ii.yebood.com

Rozwiązanie zadania Implementacja adres = ([a-za-z]+\.)*[a-za-z]+ automat = re.compile( http:// + adres) tekst = fh.read()

Rozwiązanie zadania Implementacja adres = ([a-za-z]+\.)*[a-za-z]+ automat = re.compile( http:// + adres) tekst = fh.read() [ url.group() for url in automat.finditer(tekst) ]

Podręczne zestawienie metaznaków znak opis w* wystąpienie 0 lub więcej razy w w + wystąpienie co najmniej raz w w{m, n} w występuje przynajmniej m razy, a co najwyżej n razy w? 0 lub 1 wystąpienie w w 1 w 2 alternatywa znaków w 1 i w 2. dowolny znak oprócz znaku nowego wiersza [aeiouy] pojedyncza samogłoska [A Z] wielka litera

Popularne skróty znak opis \d dowolna cyfra \w znak alfanumeryczny (zależy od LOCALE) \Z koniec napisu

Problem z ukośnikiem Rola ukośnika w Pythonie Imię\tNazwisko\n print( Tabulator to znak \\t ) c:\\windows\\win.ini

Ukośnik a wyrażenia regularne Wyszukiwanie [ re.match( \[, [ )

Ukośnik a wyrażenia regularne Wyszukiwanie [ re.match( \[, [ ) Zagadka Jak znaleźć w tekście \[?

Próby rozwiązania \[ re.match( \[, \[ ) # błąd kompilacji wyrażenia regularnego

Próby rozwiązania \[ re.match( \[, \[ ) re.match( \[, [ ) # błąd kompilacji wyrażenia regularnego # wynik: None

Próby rozwiązania \[ re.match( \[, \[ ) re.match( \[, [ ) # błąd kompilacji wyrażenia regularnego # wynik: None \\[ re.match( \\[, \[ ) # błąd kompilacji wyrażenia regularnego

Próby rozwiązania \[ re.match( \[, \[ ) re.match( \[, [ ) # błąd kompilacji wyrażenia regularnego # wynik: None \\[ re.match( \\[, \[ ) # błąd kompilacji wyrażenia regularnego re.match( \\[, [ ) # wynik: None

Próby rozwiązania \[ re.match( \[, \[ ) re.match( \[, [ ) # błąd kompilacji wyrażenia regularnego # wynik: None \\[ re.match( \\[, \[ ) # błąd kompilacji wyrażenia regularnego re.match( \\[, [ ) # wynik: None re.match( \\\[, \[ ) re.match( \\\\[, \[ ) # wynik: None # wynik: None

Poprawne rozwiązanie Rozwiązanie re.match( \\\\\[, \[ ) re.match(r \\\[, \[ )

Przetwarzanie znaków Przetwarzanie stringów na poziomie Pythona string w Pythonie znak prawdziwy \n 0x0A \t 0x0B \\ 0x5C Przetwarzanie stringów na poziomie wyrażeń regularnych string w wyrażeniu regularnym znak prawdziwy \[ 0x5B

Trochę o grupach res = re.match( a(b*)a.*(a), abbabbba ) print(res.groups()) Wynik ( bb, a )

Wyrażenia grupujące (?P<nazwa>regexp)

Zadanie Z daty w formacie 20171103 wyciągnąć dzień, miesiąc i rok.

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2}) res = re.search(wzor, W dniu 20171103 jest wykład z Pythona )

Rozwiązanie Wyrażenie regularne wzor = (?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2}) res = re.search(wzor, W dniu 20171103 jest wykład z Pythona ) print(res.group( rok ), res.group( mies ))

Zamiana tekstu Zadanie: zamienić daty w formacie yyyy mm dd na dd mm yyyy

Rozwiazanie import re wzor = (?P<rok>\d{4})-(?P<mies>\d{2})-(?P<dzien>\d{2}) def zamieniacz(match): return match.group( dzien ) + - + match.group( mies ) + - + match.group( rok ) tekst = Bitwa pod Grunwaldem miała miejsce 1410-07-15 dmr = re.sub(wzor, zamieniacz, tekst) Bitwa pod Grunwaldem miała miejsce 15-07-1410

Plan wykładu 1 2 3

Plik html to ciąg znaczników <html> <title>tytuł</title> <body bgcolor= red > <div align= center >Tekst</div> </body> </html> Tagi otwierające <html>, <body>, <div> Tagi zamykające </body>, </div>, </html>

Klasa html.parser.htmlparser class html.parser.htmlparser: def handle starttag(self, tag, attrs): def handle startendtag(self, tag, attrs): def handle endtag(self, tag): def handle data(self, dane):... Do uruchomienia parsera służy metoda feed: def handle endtag(self, data)

Klasa html.parser.htmlparser class html.parser.htmlparser: def handle starttag(self, tag, attrs): def handle startendtag(self, tag, attrs): def handle endtag(self, tag): def handle data(self, dane):... Do uruchomienia parsera służy metoda feed: def handle endtag(self, data) Lista attrs jest listą krotek (nazwa atrybutu, wartość atrybutu).

Przykład Wypisać wszystkie odwołania href <a href="adres">tekst</a>

Przykład Wypisać wszystkie odwołania href <a href="adres">tekst</a> import html.parser class MyHTMLParser(html.parser.HTMLParser): def handle starttag(self, tag, attrs): if tag == a : for (atr, val) in attrs: if atr == href : print(val) myparser = MyHTMLParser() with open( python.html ) as data: myparser.feed(data.read())

Plan wykładu 1 2 3

XML Przykład <?xml version="1.0" encoding="utf-8"?> <biblioteka> <ksiazka egzemplarze="3"> <autor>ascher, Martelli, Ravenscroft</autor> <tytul>python. Receptury</tytul> </ksiazka> <ksiazka> <autor/> <tytul>python. Od podstaw</tytul> </ksiazka> </biblioteka>

Przetwarzanie XML przetwarzanie kolejnych znaczników (saxutils) utworzenie drzewa (DOM) odpowiadającego xml owi (xml)

SAX Simple Api for XML elementy dokumentu są stopniowo wczytywane dla każdego elementu wywoływana jest odpowiednia metoda parsera

Implementacja parsera Domyślny parser from xml.sax import * class handle.contenthandler: def startdocument(self): pass def enddocument(self): pass def startelement(self, name, attrs): pass def endelement(self, name): pass def characters(self, value): pass

Implementacja własnego parsera class SaxReader(handler.ContentHandler): def characters(self, value): print(value) def startelement(self, name, attrs): for x in attrs:

Wykorzystanie parsera from xml.sax import make parser from xml.sax.handler import feature namespaces from xml.sax import saxutils parser = make parser() parser.setfeature(feature namespaces, 0) dh = SaxReader() parser.setcontenthandler(dh) parser.parse(fh)

SAX: podsumowanie Przetwarzanie w trybie do odczytu ; przetwarzanie porcjami; SAX jest szybki, nie wymaga dużej pamięci.

DOM: Document Object Model Dokument jest pamiętany w całości jako drzewo Dokument (drzewo) można modyfikować; Przetwarzanie wymaga sporo czasu i pamięci, całe drzewo jest przechowywane w pamięci; Specyfikacją zarządza W3C.

Przypomnienie Przykład <?xml version="1.0" encoding="utf-8"?> <biblioteka> <ksiazka egzemplarze="3"> <autor>ascher, Martelli, Ravenscroft</autor> <tytul>python. Receptury</tytul> </ksiazka> <ksiazka> <autor/> <tytul>python. Od podstaw</tytul> </ksiazka> </biblioteka>

Ilustracja Document <?xml version="1.0" encoding="utf-8"?> Element <biblioteka> Text "" Element Text Element <ksiazka> "" <ksiazka> Text "" Element <autor> Element <tytul> Text Asher,... Text Python. Od...

Biblioteki xml.dom: DOM Level 2 xml.dom.minidom: Lightweight DOM implementation, DOM Level 1

Implementacja minidom Klasa Node atrybut klasy.nodename.nodevalue.attributes.childnodes przykład biblioteka, ksiazka, autor Python. Receptury <ksiazka egzemplarze= 3 > lista podwęzłów

Tworzenie drzewa Przeglądanie pliku XML import xml def wezel(node): print(node.nodename) for n in node.childnodes: wezel(n) doc = xml.dom.minidom.parse( content.xml ) wezel(doc)

Manipulacja drzewem DOM Manipulacja węzłami appendchild(newchild) removechild(oldchild) replacechild(newchild, oldchild)

Manipulacja drzewem DOM Manipulacja węzłami appendchild(newchild) removechild(oldchild) replacechild(newchild, oldchild) Tworzenie nowych węzłów new = document.createelement( chapter ) new.setattribute( number, 5 ) document.documentelement.appendchild(new) print(document.toxml())

Podsumowanie: DOM umożliwia manipulowanie całym drzewem wymaga wiele czasu i pamięci dla dużych plików