Ordlistor, filhantering och ut på webben Linda Mannila 20.11.2007
Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Funktioner och moduler Villkorssatsen if Looparna for och while
Denna föreläsning Ny datatyp ordlistan (dictionary) Modulen webbrowser Filhantering
Ordlistor (dictionaries) Samlingsdatatyp Nyckel-värde -par Påminner om en vanlig ordbok katt hund ko kissa koira lehmä
Ordlistor (dictionaries) Skapar en tom ordlista: ordlista = {} Skapar en ordlista med ett nyckel-värde-par i. ordlista = { katt : kissa }
Skapa ordlistor Skapar en tom ordlista: ordlista = {} Skapar en ordlista med ett nyckel-värde-par i. ordlista = { katt : kissa } Nyckel Värde
Nycklar och värden Får endast finnas en nyckel med samma namn i en ordlista ordlista = { katt : kissa, katt : misu }
Nycklar och värden Får endast finnas en nyckel med samma namn i en ordlista ordlista = { katt : kissa, katt : misu } FEL! katt får ej finnas som nyckel flera gånger i samma ordlista
Lägga till i en ordlista Sätter till ett nytt par i ordlistan ordlistan[nynyckel] = nyttvärde >>> ordlista = {'katt' : 'kissa'} >>> ordlista {'katt': 'kissa'} >>> ordlista['hund'] = 'koira' >>> ordlista {'hund': 'koira', 'katt': 'kissa'}
Lägga till i en ordlista Om nyckeln redan finns ersätts det gamla värdet med det nya >>> ordlista {'hund': 'koira', 'katt': 'kissa'} >>> ordlista['katt'] = 'misu' >>> ordlista {'hund': 'koira', 'katt': 'misu'}
Funktioner på ordlistor Ta bort nyckel-värde-par: del Funktionen del tar bort ett nyckel-värde-par ur ordlistan >>> ordlista {'hund': 'koira', 'katt': 'misu'} >>> del(ordlista['hund']) >>> ordlista {'katt': 'misu'}
Funktioner på ordlistor Antalet par i en ordlista: len Funktionen len berättar hur många nyckel-värde-par som finns i ordlistan >>> ordlista {'hund': 'koira', 'katt': 'misu'} >>> len(ordlista) 2
Exempel Provkörning: Svenska Engelska ------------------ blå blue gul yellow sve_eng = {'röd' : 'red', grön green 'blå' : 'blue', röd red 'grön': 'green', 'gul' : 'yellow'} print "%-9s %-9s" % ("Svenska", "Engelska") print "------------------" for ord in sve_eng: print "%-9s %-9s" % (ord, sve_eng [ord])
Ordlistmetoder keys() keys() returnerar en lista över vilkanycklar som finns i ordlistan >>> ordlista {'hund': 'koira', 'katt': 'misu'} >>> ordlista.keys() ['hund', 'katt']
Ordlistmetoder values() values() returnerar en lista över vilkavärden som finns i ordlistan >>> ordlista {'hund': 'koira', 'katt': 'misu'} >>> ordlista.values() ['koira', 'misu']
Övriga ordlistmetoder http://docs.python.org/lib/typesmapping.html
Ordlistor för menyer Ordlistor är bra för att hantera menyer i program, t.ex. O open file P print file Q quit Make your choice:
Menyexempel meny = {'H' : 'Skriv ut en hälsning', 'X': 'Avsluta' } while True: for val in meny: print val + "\t" + meny[val] svar = raw_input( \nvad vill du göra? ') if svar == 'H' or svar == 'h': print \nhallå hallå hallå!\n" elif svar == 'X' or svar == 'x': print \ndu vill alltså sluta. OK!" break Provkörning H Skriv ut en hälsning X Avsluta Vad vill du göra? h Hallå hallå hallå! H Skriv ut en hälsning X Avsluta Vad vill du göra? r H Skriv ut en hälsning X Avsluta Vad vill du göra? x Du vill alltså sluta. OK!
Ny modul: webbrowser http://docs.python.org/lib/module-webbrowser.html >>> import webbrowser >>> dir(webbrowser) ['BackgroundBrowser', 'BaseBrowser', 'Elinks', 'Error', 'Galeon', 'GenericBrowser', 'Grail', 'Konqueror', 'Mozilla', 'Netscape', 'Opera', 'UnixBrowser', 'WindowsDefault', ' all ', ' builtins ', ' doc ', ' file ', ' name ', '_browsers', '_iscommand', '_isexecutable', '_synthesize', '_tryorder', 'browser', 'get', 'main', 'open', 'open_new', 'open_new_tab', 'os', 'register', 'register_x_browsers', 'shlex', 'stat', 'subprocess', 'sys', 'time']
Ny modul: webbrowser De olika versionerna av funktionen open (open, open_new, open_new_tab) öppnar webbsidor i browsern import webbrowser webbrowser.open('http://www.abo.fi') Webbadressen som argument
Webbrowserexempel import webbrowser sida = raw_input('vilken sida vill du öppna? ') webbrowser.open('http://' + sida) Användaren behöver inte själv skriva in http://, utan det räcker med t.ex.www.abo.fi. Programmet lägger automatiskt till http://
webboppnare.py import webbrowser def skriv_meny(): print "Python på webben" meny = {"A" : "http://www.python.org", "B" : "http://www.abo.fi/~linda.mannila/proggk07"} print for i in meny.keys(): print "%s : %s" % (i, meny[i]) val = raw_input("vilken sida vill du öppna? ") return meny[val] def main(): sida = skriv_meny() webbrowser.open(sida) main()
Filhantering Hittills: All input via tangentbordet All output till skärmen Nu filer Hämta data ur en fil Lagra data i en fil
Filer För att kunna göra något med en fil måste man först öppna den för läsning för skrivning
Att läsa från en fil Öppna för läsning infil = open(filnamn, r ) Läs filens innehåll data = infil.read() Läs en rad i taget for rad in infil: kod som gör något med raden
Att skriva till en fil Öppna för skrivning utfil = open(filnamn, w ) Skriv en sträng till filen utfil.write(sträng) OBS! Om filen inte finns skapas den Om den finns skrivs allt gammalt innehåll över! För att skriva sist i en fil: använd a (append) i stället för w
Kom ihåg! Att stänga filer Då man öppnar en fil (oberoende av i vilket läge r/w/a) öppnar man kontakten till filen samtidigt låses filen så att inget annat program kan komma åt det För att frigöra filen igen måste man stänga kontakten Öppna: infil = open(filnamn, r ) Stäng: infil.close()
Gardera mot fel Fel att försöka öppna en fil som inte finns IOError Fel att försöka läsa från en fil som man redan läst allt ur EOFError Oberoende av fel hantera dem try - except