Föreläsning 18 Filer och avbildningar Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 15.11.2011
Avbildningar Hur skulle du göra en: Ordlista Man ger ett engelskt ord och får det svenska. Adressbok Med personens namn får du kontaktuppgifterna. Uppslagsverk Med sökord får du informationen om saker. Studentregister Med studentnummer får man ett studentobjekt. En lista eller mängd skulle duga. Det tar tid att hitta i en lista utan att gå igenom allting. Det är extra arbete att koppla ihop en sak med en annan. Föreläsning 18 Filer och avbildningar 2/18
Avbildningar Lösning En avbildning (eng. map, associative array eller dictionary) kan användas i detta sammanhang. dict-klassen som är inbyggd i Python ger avbildningar. Avbildningens värden är alla kopplade till nyckelvärden ( sökord ). Nyckelvärdena kan vara godtyckliga objekt så länge de: Är oföränderliga. Har en hash ()-metod konsistent med ekvivalensrelationen som används. I praktiken används oftast strängar och heltal. Föreläsning 18 Filer och avbildningar 3/18
Avbildningar Lösning En lista kan ses som en avbildning från heltal till värden. Nyckelvärdena är en mängd (samma nyckel kan inte användas två gånger i en avbildning). Nya värden för en nyckel ersätter de tidigare. Syntaxen för att läsa, skriva och ta bort värden är densamma som för listor, men: Skriver man ett värde för en nyckel som inte finns läggs ett nytt nyckel/värde-par till i avbildningen. Avbildningar kan skrivas inom klammerparentes med komma mellan paren och kolon mellan nyckel och värde. Föreläsning 18 Filer och avbildningar 4/18
Avbildningar Exempel Engelska ord som nycklar, svenska som värden. ordbok = {"cat": "katt", "dog": "valp"} # Skapa ordbok["cow"] = "ko" # Tillsätt ordbok["dog"] = "hund" # Ändra print ordbok["dog"] # Hämta print "dog" in ordbok # Finns nyckeln? Föreläsning 18 Filer och avbildningar 5/18
Avbildningar Exempel tom1 = {} # Ny tom avbildning tom2 = dict() # Ny tom avbildning kopia1 = dict(ordbok) # Kopiera avbildning kopia2 = ordbok.copy() # Kopiera avbildning del ordbok["cow"] # Borttagning print len(kopia1) # Längd Föreläsning 18 Filer och avbildningar 6/18
Avbildningar Metoder för omvandling till listor items() Hämta en lista över tupler med nyckel och värde. keys() Hämta en lista över nycklar. values() Hämta en lista över värden. Notera att ordningen på listorna kan ändras om man ändrar på avbildningen; kombinera inte listor från olika versioner av avbildningen! Föreläsning 18 Filer och avbildningar 7/18
Avbildningar Metoder för att ta bort pop(key) Ta bort värdet med nyckeln key och returnera det. Kasta KeyError om den inte finns. pop(key, default) Ta bort värdet med nyckeln key och returnera det om det finns, annars returnera default. popitem() Ta bort ett godtyckligt värde och returnera nyckel/värde-paret. Kasta KeyError om avbildningen är tom. clear() Töm avbildningen. Föreläsning 18 Filer och avbildningar 8/18
Avbildningar Uppdateringsmetod update(new) Ersätt eller lägg till element från new i avbildningen. new kan vara en avbildning eller vad som helst som går att iterera över (t.ex. en lista) med nyckel/värde-par (t.ex. listor med 2 element). Notera att ordningen på listorna kan ändras om man ändrar på avbildningen; kombinera inte listor från olika versioner av avbildningen! Föreläsning 18 Filer och avbildningar 9/18
Filer Vad? Generellt är en fil en sekvens data med ett namn placerad i en katalog (mapp). I de flesta fall är filers innehåll en lista oktetter. Ofta delas filer in i textfiler (där oktetterna kan tolkas som text genom en teckenkodning) och binärfiler (allt annat). Textfiler är lättare att undersöka och jobba med, så vi koncentrerar oss på dem i denna kurs. Det är inte svårt att lära sig använda binärfiler senare. Föreläsning 18 Filer och avbildningar 10/18
Filer Öppna filer Först måste man öppna en fil med open()-metoden, som returnerar ett filobjekt. Första argumentet är filens namn som en sträng. Det andra argumentet är läget som filen öppnas i, en sträng som anger hur filen ska öppnas ( r om bortlämnat): r Läsning (filen måste finnas) w Skrivning (ersätts om finns) a Lägg till i slutet av filen + efter en av ovannämnda Uppdatering (både läs/skriv) b tillsatt binärläge Föreläsning 18 Filer och avbildningar 11/18
Filer Läs filer Filobjekt har metoderna: readline() Läs en rad från filen och returnera som sträng (med radbytet i slutet). readlines() Läs hela resten av filen och returnera raderna som en lista av strängar (med radbyte i slutet på varje). read() Läs hela resten av filen och returnera som sträng. read(bytes) Läs resten av filen upp till bytes oktetter och returnera som sträng. Föreläsning 18 Filer och avbildningar 12/18
Filer Skriv filer Filobjekt har metoderna: write(text) Skriv text till filen. writelines(lines) Skriv listan av strängar lines till filen. Vill du ha radbyten måste du själv sätta dem i lines. Stäng filer Stäng filen med close()-metoden när du är klar! Föreläsning 18 Filer och avbildningar 13/18
Filer Exempel animals.py läser en textfil med ord och sätter in varje ord i en lista. average_temperature.py läser en fil med tal och räknar medeltalet och skriver det i en fil. average_temperatures.py läser filer med tal och räknar medeltalen och skriver dem i en fil. Föreläsning 18 Filer och avbildningar 14/18
Filer Exempel word_count.py räknar mängden ord i en fil. Orden sorteras enligt förekomst och lagras i en annan fil. Först tar den bort skiljetecken och radbyten. Orden som finns kvar spjälks fram med att bryta vid mellanslag och omvandlas till små bokstäver. En avbildning används för att hålla reda på hur många gånger ett ord påträffats. Sortering enligt värdet i avbildningen. Föreläsning 18 Filer och avbildningar 15/18
Knep med slingor break och continue break-satsen avbryter den (innersta) pågående for- eller while-slingan. Den används t.ex. för att avbryta en sökning i en lista. continue-satsen hoppar till nästa varv i den (innersta) pågående for- eller while-slingan. Den används t.ex. för att hoppa över ett element i en lista. Båda kan ersättas med t.ex. if-satser och ändringar av slingans villkor. Föreläsning 18 Filer och avbildningar 16/18
Knep med slingor for med filer for-slingor kan använda textfiler (i läsläge) som om de vore listor. Slingans variabel kommer att få raderna i textfilen som värde. Det här är ett kortfattat sätt att behandla alla rader i en fil. Se t.ex. word_count.py för exempel. Föreläsning 18 Filer och avbildningar 17/18
Slut Nästa föreläsning 24.11.2011 14:15 16:00 i Maari-C Dokumentation, tupler och mängder Kom ihåg Rond 9 deadline 22.11. Föreläsning 18 Filer och avbildningar 18/18