IB111: cvičení 11 Zpracování textu, regulární výrazy 29. 11. 2013 Demo - soubory Cvičení 11 Soubory # otevřeni souboru pro ctěni Demo - soubory Demo - řetězce f = openCvstupni_soubor.txt", Výpis seznamu studentů # načteni celého obsahu souboru do řetězce Uložení seznamu studentů do souboru obsah = f.readO Regulární # načteni souboru souboru jako seznam radku výrazy Demo - regex Studenti v daném semestru radky = f.readlines() # otevřeni souboru pro zapiš Pocty studentů v oborech f = openCvystupni_soubor.txt", Pocty studentů v oborech seřazené # zapiš řetězce do souboru Práce s HTML f.write(co) Demo - HTML Odkazy Státy abeced né # uzavřeni souboru f.close() Demo - řetězce >>> radek = "jablko, hruška, pomeranč \n" >>> radek = radek.rstrip() #-> radek = 'jablko, hruška, pomeranč' >>> radek. split(", ") ['jablko', 'hruška', 'pomeranč'] >>> radek. replaceC',", " -") ' jablko - hruška - pomeranč' >>> radek. 8 find("hruška") »> x = "\ n" >>> print x, >>> x = r" \n" >>> print x, \n Výpis seznamu studentů Stáhněte si ze studijních materiálů zmutovaný seznam.studentu. csv. Napište funkci, která vypíše seznam všech studentů v abecedním pořadí. >>> studentiAbecedne() Ambrozkova, Marcel Ambrozkova, Pavla Beranova, David Butulova, Karel Butulova, Martina Butulova, Tomas Chlubnova, Vladimir Chudik, David Cukr, Filip ■0 0.0 Uložení seznamu studentů Napište funkci, která vypíše uloží seznam všech studentů v abecedním pořadí do textového souboru. >>> ulozStudentyAbecedne("studenti_serazene.txt") l studentLserazene.txt Ambrozkova, Marcel Ambrozkova, Pavla Beranova, David Butulova, Karel Butulova, Martina Butulova, Tomas Chlubnova, Vladimir Chudik, David ■0 0.0 Demo - regulární výrazy »> import re >>> m = re.search(r"(\w+ (\w+)" , \ "Isaac Newton, fyzik") >>> m.group ( 0) "Isaac Newton" >>> m.group (1) "Isaac" >>> m.group (2) "Newton" ■ libovolný znak ., opakování * + ? ■ výběr ze skupiny [abc], [a-z] ■ "cokoliv jiného než" [ "abc] ■ číslice \d, alfanumerické znaky \w, bílé znaky \s 1 -00.0 Studenti v daném semestru Napište funkci, která vypíše pouze ty studenty kteří studují v zadaném semestru. >>> studentiVSemestru(3) Beranova, David Ejem, Klara Fojt, Roman Hájkova, Tomas Jurka, Klara Kristanova, Barbora Kucirek, Jakub Lounek, Veronika Malecek, Kamila Nemcikova, Martin Sarman, Lukas 1 -00.0 Počty studentů v oborech Napište funkci, která vypíše pouze počty studentů v jednotlivých oborech. >>> poctyStudentuVOborech() PSK 3 PTS 1 BIO 1 PDS 3 MI 2 INVS 8 SOCI 18 GRA 5 PSZD 4 UMI 13 PLIN 26 BcAP 2 6 Počty studentů v oborech seřazeně Cvičení 11 Vylepšete předchozí funkci tak, aby vypisovala obory sestupně podle počtu studentů v daném oboru. Soubory Demo - soubory Demo - řetězce >>> poctyStudentuVOborechSerazene() Výpis seznamu studentů PLIN 26 Uložení seznamu studentů do souboru BcAP 2 6 Regulární SOCI 18 výrazy UMI 13 Studenti v daném INVS 8 Pocty studentů v oborech GRA 5 Pocty studentů v PSZD 4 Práce s HTML PSK 3 Demo - HTML PDS 3 Odkazy Státy abecedně MI 2 Domácí úkol PTS 1 č.5 Pocty obyvatel Imitace textu BIO 1 Demo - HTML import urllib2 URL_FI = "http://www.fi.muni.cz" def stahniHtml(url): f = urllib2.urlopen(url) obsah = f.read() f.close() return obsah def najdiNadpisy(url): text = stahniHtml(url) nadpisy = re.findall(r'(.*?)',\ text) print nadpisy # [('ľ, 'Fakulta informatiky Masarykovy # univerzity'), ('2', 'Studenti a zamestnanci'), # ... 4 □ ► >> odkazy("http://www.fi.muni . cz " ) https://is.muni.cz/prihlaska/info.pl?op=n;utyp. http http http http http http http http http //www.cerit.cz/cs/cerit-sp/ //www.video.muni.cz/prednasky.cgi?fakulta. //is.muni.cz/do/14 33/uredni_deska/ //is.muni.cz/ //is .muni.cz/obchod/fakulta/fi/ //is.muni.cz/do/fi/studas/index.html //www.skm.muni.cz //library.muni.cz //inet.muni.cz ■0 0.0 Státy abecedně Podívejte se tabulku států podle populace na adrese: http://en.wikipedia.org/wiki/List_of_ countries_by_population Napište funkci, která vypíše všechny státy z této tabulky v abecedním pořadí. >>> statyPodleAbecedy() Afghánistán Albania Algeria American Samoa Andorra Angola Anguilla Antigua and Barbuda ■0 0.0 Počty obyvatel Napište funkci statyPodlePopulace(minPopulace, maxPopulace) která podle tabulky na adrese http://en.wikipedia.org/wiki/List_of_ countries_by_population nalezne a vypíše ty státy které mají počet obyvatel v intervalu [minPopulace, maxPopulace]. >» statyPodlePopulace (2e8, le9) 317121000 United States 237641326 Indonesia 201032714 Brazil Imitace textu Napište funkci imitaceTextu (soubor, pocetSlov) , která provede analýzu četnosti slov a dvojic slov (tj. která slova následují po kterých slovech a jak často) a využije této analýzy k vygenerování náhodného textu o dané délce. Tento text jednak vypíše na standardní výstup, jednak zapíše do souboru. Název výstupního souboru určete modifikací jména vstupního souboru, např. krakatit.txt —> krakatitJmitace.txt >» imitaceTextu ("krakatit.txt", 30) S hrůzou prsty. Potom vyslechl domovnici; zvěděl sice na tom, co budeš sebou výsměšná a rudé, jako vždy. A nám ztratil. Ovšem něco vyžvanil, uvědomoval si doktoři stopy jejího nitra