280 likes | 437 Views
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.
E N D
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 kissa hund koira ko 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å ordlistorTa 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å ordlistorAntalet 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 grön green röd red sve_eng = {'röd' : 'red', 'blå' : 'blue', 'grön': 'green', 'gul' : 'yellow'} print "%-9s %-9s" % ("Svenska", "Engelska") print "------------------" for ord in sve_eng: print "%-9s %-9s" % (ord, sve_eng [ord])
Ordlistmetoderkeys() • keys() returnerar en lista över vilka nycklar som finns i ordlistan >>> ordlista {'hund': 'koira', 'katt': 'misu'} >>> ordlista.keys() ['hund', 'katt']
Ordlistmetodervalues() • values() returnerar en lista över vilka vä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 tillhttp://
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